WIN32 select()报告listen()socket上的异常; WSAGetLastError()= 0?

时间:2018-02-14 02:37:28

标签: c++ windows tcp network-programming

标题可能会说明一切?

Windows 10,2017年Visual Studio社区。

C ++服务器侦听端口,生成的FD放在fd_set中输入,一个放在异常中。 select()被称为。{/ p>

它返回,并且连接是accept()。它的FD也被添加到这两个fd_sets中。

连接正常,结束。然后将其FD从两个fd_sets中删除。

下次拨打select()时,我告诉监听套接字有异常,但WSAGetLastError()为零。

根据我的说明,收听FD有O_NONBLOCK设置,因为:

  

选择或轮询后,可能并不总是有连接等待   返回可读性事件,因为可能会有后续事件   网络错误。为防止accept()阻止,我们必须设置   O_NONBLOCK

它也设置了SO_REUSEADDR

listen()的队列深度为5。

1 个答案:

答案 0 :(得分:3)

您需要使用选项SO_ERROR在侦听套接字上调用getsockopt()

WSAGetLastError()的零点表示select()未返回-1。