win32 select()报告插入()套接字上的例外;wsagetlasterror()= 0

WIN32 select() reports exception on listen() socket; WSAGetLastError() = 0?

本文关键字:wsagetlasterror 报告 select 插入 套接字 win32      更新时间:2023-10-16

标题可能说明了一切?

Windows 10,Visual Studio社区2017。

a c 服务器在端口上听,将结果的FD放入FD_SET中以进行输入,一个用于例外。select()称为。

它返回,并且连接为 accept() ed。它的FD也添加到这两个FD_SET中。

连接良好,结束。然后将其fd从两个fd_set中删除。

在下一次呼叫select()时,我被告知在听力插座上有一个例外,但是WSAGetLastError()为零。

根据我的笔记,聆听FD具有O_NONBLOCK集,因为:

选择或民意调查后可能不会总是等待连接 返回可读性事件,因为随后可能会有 网络错误。为了防止accept()阻塞,我们必须设置 O_NONBLOCK

它也有SO_REUSEADDR集。

listen()的队列深度为5。

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

WSAGetLastError()的零是指select()未返回-1。