使用WinSocks进行非阻塞connect()

时间:2009-05-22 17:20:58

标签: c++ sockets connect nonblocking

根据MSDN,您必须创建一个非阻塞套接字,如下所示:

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

然后在select()的write-fdset中使用它。要检查连接是否成功,您必须查看套接字是否可写。但是,MSDN文章没有描述如何检查错误。

如何connect()

1 个答案:

答案 0 :(得分:2)

您使用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会为您提供错误编号(如果有)。

相关问题