【发布时间】:2012-12-24 11:05:40
【问题描述】:
我正在尝试通过非阻塞 connect() 连接到另一台机器上的服务器。
但是,当我这样做时,Connect() 返回 -1,并且我从 WSAGetLastError() 收到 WSAEWOULDBLOCK。
MSDN 文档指出:WSAEWOULDBLOCK 报告为在非阻塞 SOCK_STREAM 套接字上调用 connect 的结果是正常的,因为必须经过一段时间才能建立连接 (reference)。
问题是我总是收到错误,即使我的服务器没有运行,connect() 也会返回 -1。
正如建议的那样,我的套接字是 SOCK_STREAM 套接字。我该如何补救?我是否应该在 connect() 调用之后提供超时,以确保有足够的时间让 connect 建立连接?
【问题讨论】:
-
如果您尝试连接到一个不存在的服务器,它可能确实会阻塞一段时间。即使连接到不存在的服务器或未打开的服务器端口,也总会进行一些网络通信。请参阅TCP 3-way handshake 以了解建立连接时会发生什么。
-
你可以使用 select() 阻塞直到连接完成。