【问题标题】:Non-blocking connect() with WinSocks使用 WinSocks 的非阻塞 connect()
【发布时间】:2009-05-22 17:20:57
【问题描述】:

根据MSDN,您必须像这样创建一个非阻塞套接字:

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

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

如何查看connect() 是否没有成功,如果是,为什么没有成功?

【问题讨论】:

  • 您链接到的页面似乎不是正确的。我在那里看不到任何有关阻塞套接字的信息。

标签: c++ sockets connect nonblocking


【解决方案1】:

您使用getsockopt() 检查套接字错误。这是 Stevens 的一个 sn-p(当然是 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 会为您提供错误编号(如果有)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2016-07-06
    相关资源
    最近更新 更多