C++ windows中select()偶尔超时故障排除

C++ windows中select()偶尔超时故障排除,c++,sockets,tcp,C++,Sockets,Tcp,我偶尔会遇到select()超时的问题。我把它设定为20秒。系统将正确处理100个事务,但偶尔会有一个事务因selet超时而失败。它大约每隔几秒钟执行一个事务,打开和关闭每个事务的tcp连接。我认为我的应用程序连接到的服务器可能有很多连接尝试等待,但日志中没有显示4226个事件 我在使用wireshark时注意到的另一点是,我得到了一个SYN,RST,作为对我发送的SYN的响应。这种情况在头一两秒钟内只发生几次,然后我在Wireshark中看不到任何其他活动。每次进入select时,您可能需要重

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


我在使用wireshark时注意到的另一点是,我得到了一个SYN,RST,作为对我发送的SYN的响应。这种情况在头一两秒钟内只发生几次,然后我在Wireshark中看不到任何其他活动。每次进入select时,您可能需要重新生成超时值。选择可以修改此值的选项:

发件人:

如果它修改了它,并且您将其重新用于返回select的输入,则可能无法获得预期的超时。尽管这是一个linux手册页,但使用Windows时,您的里程可能非常长,特别是手册页中指出:

glibc pselect()函数不起作用 修改其超时参数;这是 POSIX.1-2001要求的行为


这是一个推测性的答案,希望能有所帮助。也许如果您发布一些代码,我们可以确认/否认这个假设。

据我所知,您在异步连接上缺少错误。查看。

请发布您正在使用的代码。然后我们可以分析它并提出一些建议。在我听来,您似乎正在尝试建立连接,但没有检查连接是否成功,然后阻塞select以获得响应。但是如果没有代码,就无法判断。。。
 select() may update the timeout argument to indicate how much time was left.