2017-07-03 74 views
0

我基于Windows操作系统上的IO重叠网络编程范例设计,编程和实现了一个服务器应用程序。它与预期的性能很好地协作,观察到在任意选择的客户机中有时没有任何事情发生,数据传输似乎是冻结的。它甚至不会生成任何TCP/IP错误条件,例如超时或任何错误。在这种情况下,服务器会将该连接保持为活动连接,从而导致不必要的资源预留。这可能是什么原因?作为一个解决方案我如何检测这种连接。我怎么能减少这种情况 谢谢x检测服务器中的空闲连接

+0

默认情况下,TCP在连接上没有超时。要么你需要专门启用它(使用'SO_KEEPALIVE'选项),或者在自己的协议中包含某种“ping”或“keep-alive”消息。 –

+0

非常感谢x。但是这发生在数据传输的中间,客户端似乎卡在传输中而没有从阻塞recv返回。这样的维护会有帮助吗? – Hara

+0

在这种情况下,您可能需要使套接字非阻塞,并使用轮询(例如'select')和超时。如果轮询超时则出现问题,需要处理。 –

回答

0

这可能是什么原因?

客户端已经停止发送或接收,从您的问题不清楚哪个。

作为解决方案我该如何检测这种连接。我怎样才能减少这种情况?

如果您正在阅读,请使用阅读超时,如果您正在阅读,请使用带有定时select()的非阻止模式。

+0

大家好,非常感谢大家。对不起,这个问题是内容丰富的。我的意思是客户无限期地等待recv阻止呼叫。我通过设置recv超时解决了这个问题。我仍然感到困惑,为什么在发送几个kbs后连接就冻结了。但服务器报告整个缓冲区已被传输。它与网络的带宽有关吗?我如何测试连接到服务器的稳定性 – Hara