gpt4 book ai didi

c++ - WIN32 select() 报告 listen() 套接字异常; WSAGetLastError() = 0?

转载 作者:可可西里 更新时间:2023-11-01 02:57:37 27 4
gpt4 key购买 nike

标题也许说明了一切?

Windows 10、Visual Studio Community 2017。

C++ 服务器监听一个端口,并将生成的 FD 放入一个 fd_set 中用于输入,一个用于异常。 select() 被调用。

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

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

在下次调用 select() 时,我被告知监听套接字出现异常,但 WSAGetLastError() 为零。

根据我的笔记,监听 FD 设置了 O_NONBLOCK,因为:

There may not always be a connection waiting after select or poll return a readability event, because there might be a subsequent network error. To prevent accept() from blocking we must set O_NONBLOCK.

它还设置了 SO_REUSEADDR

listen() 的队列深度为 5。

最佳答案

您需要调用getsockopt()在带有选项 SO_ERROR 的监听套接字上。

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

关于c++ - WIN32 select() 报告 listen() 套接字异常; WSAGetLastError() = 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48778823/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com