代码之家  ›  专栏  ›  技术社区  ›  Patrick Glandien

带Winsocks的非阻塞连接()。

  •  2
  • Patrick Glandien  · 技术社区  · 15 年前

    根据 MSDN 您必须创建这样的非阻塞套接字:

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

    并在写入fdset中用于 select() 之后。要检查连接是否成功,必须查看套接字是否可写。但是,msdn文章没有描述如何检查错误。

    我怎么看 connect() 成功,如果是这样, 为什么? 它没有成功?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Nikolai Fetissov    15 年前

    检查套接字错误 getsockopt() . 这里是stevens的一个片段(假定它是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 给出错误号(如果有)。