解决Windows中select()的偶然超时问题

时间:2010-06-08 19:24:41

标签: c++ sockets tcp

我偶尔会遇到select()超时的问题。我把它设置了20秒。系统将正确处理100个事务,但偶尔会因为selet超时而失败。它每隔几秒执行大约一次事务,每次事务打开和关闭tcp conncetion。我认为我的应用程序连接的服务器可能有许多未决的连接尝试,但日志中没有显示4226个事件

我在使用wireshark时注意到的另一点是我正在获取SYN,RST以响应我正在发送的SYN。这仅在第一或第二秒发生几次,然后我在Wireshark中看不到任何其他活动

2 个答案:

答案 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