C++ 非阻塞连接()上的WSAEWOULDBLOCK错误

C++ 非阻塞连接()上的WSAEWOULDBLOCK错误,c++,winsock,winsock2,C++,Winsock,Winsock2,我正在尝试通过非阻塞连接()连接到另一台计算机上的服务器 但是,当我这样做时,Connect()返回-1,我从WSAGetLastError()接收WSAEWOULDBLOCK MSDN文档说明:WSAEWOULDBLOCK作为在非阻塞SOCK_流套接字上调用connect的结果报告是正常的,因为必须经过一段时间才能建立连接() 问题是我总是收到错误,即使我的服务器没有运行,connect()也会返回-1 正如建议的那样,我的套接字是SOCK\u流套接字。我该怎么补救呢?我是否应该在connec

我正在尝试通过非阻塞连接()连接到另一台计算机上的服务器

但是,当我这样做时,Connect()返回-1,我从WSAGetLastError()接收WSAEWOULDBLOCK

MSDN文档说明:WSAEWOULDBLOCK作为在非阻塞SOCK_流套接字上调用connect的结果报告是正常的,因为必须经过一段时间才能建立连接()

问题是我总是收到错误,即使我的服务器没有运行,connect()也会返回-1


正如建议的那样,我的套接字是SOCK\u流套接字。我该怎么补救呢?我是否应该在connect()调用后提供一个超时,以确保为connect提供足够的时间来建立连接?

使用并传递重叠的
结构。这样,您可以在连接尝试完成后检索实际状态。

如果您尝试连接到不存在的服务器,它可能确实会阻塞一段时间。即使连接到不存在的服务器或未打开的服务器端口,也始终会有一些网络通信。请参阅以了解建立连接时发生的情况。您可以使用select()阻止,直到连接完成。您也可以使用
connect()
。您可以使用
WSAAsyncSelect()
检测连接何时完成,是否成功,以及失败时的错误代码。@Remy:或
WSAEventSelect
WSAEnumNetworkEvents
。但是,这些其他选项没有一个像使用重叠的
结构那样干净和一致。