関数エラー時の戻り値

マニフェスト定数 SOCKET_ERROR は、関数のエラーを確認するために用意されています。 この定数の使用は必須ではありませんが、推奨されます。 次の例は、 SOCKET_ERROR 定数の使用を示しています。

一般的な BSD スタイル (Windows では機能しません)

        r = recv(ClientSocket, recvbuf, recvbuflen, 0);
        if (r == -1     /* or r < 0 */
            && errno == EWOULDBLOCK) {
            printf("recv failed with error: EWOULDBLOCK\n");
        }    

Windows スタイル

        iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
        if (iResult == SOCKET_ERROR ) {
            iError = WSAGetLastError();
            if (iError == WSAEWOULDBLOCK)
                printf("recv failed with error: WSAEWOULDBLOCK\n");
            else
                printf("recv failed with error: %ld\n", iError);

            closesocket(ClientSocket);
            WSACleanup();
            return 1;
        }    

エラー コード - errno、h_errno、WSAGetLastError

Winsock エラーの処理

ソケット アプリケーションを Winsock に移植する

Winsock プログラミングに関する考慮事項

Windows ソケットのエラー コード