3

MSDNによると、次のようなノンブロッキング ソケットを作成する必要があります。

unsigned nonblocking = 1;
ioctlsocket(s, FIONBIO, &nonblocking);

その後、 write-fdset で使用しselect()ます。接続が成功したかどうかを確認するには、ソケットが書き込み可能かどうかを確認する必要があります。ただし、MSDN の記事には、エラーをチェックする方法が記載されていません。

connect()が成功しなかったかどうか、またそうである場合、成功しなかった理由を確認するにはどうすればよいですか?

4

1 に答える 1

3

でソケットエラーを確認しますgetsockopt()。これはスティーブンスのスニペットです (Unix ですが、winsock にも似たようなものがあるはずです):


if ( FD_ISSET( sockfd, &rset ) || FD_ISSET( sockfd, &wset )) {
    len = sizeof(error);
    if ( getsockopt( sockfd, SOL_SOCKET, SO_ERROR, &error, &len ) < 0 )
        return -1;
} else {
    /* error */
}

errorエラー番号があれば表示されます。

于 2009-05-22T18:58:55.890 に答える