我偶尔会遇到select()超时的问题。我把它设置了20秒。系统将正确处理100个事务,但偶尔会因为selet超时而失败。它每隔几秒执行大约一次事务,每次事务打开和关闭tcp conncetion。我认为我的应用程序连接的服务器可能有许多未决的连接尝试,但日志中没有显示4226个事件
我在使用wireshark时注意到的另一点是我正在获取SYN,RST以响应我正在发送的SYN。这仅在第一或第二秒发生几次,然后我在Wireshark中看不到任何其他活动
答案 0 :(得分:0)
每次进入选择时,您可能需要重建超时值。选择显然可以修改此值:
来自here:
select() may update the timeout argument to indicate how much time was left.
如果它修改了它,并且你重新将它重新输入到select中,那么你可能无法获得预期的超时。这是一个linux手册页,但你的里程可能非常适合Windows,尤其是手册页指出:
glibc pselect()函数没有 修改其超时参数;这是 POSIX.1-2001所需的行为
某种推测性答案,希望它有所帮助。也许如果你发布一些代码,我们可以确认/否认这个假设。
答案 1 :(得分:0)
据我所知,您在异步连接上缺少错误。看看this SO question。