【发布时间】:2017-12-06 14:53:22
【问题描述】:
我在windows操作系统上设计、编程并实现了一个基于IO重叠网络编程范式的服务器应用程序。它与预期的性能配合得很好,据观察,在任意选定的客户端中有时什么都没有发生,数据传输似乎被冻结了。它甚至不会生成任何 TCP/IP 错误条件,例如超时或任何情况。在这种情况下,服务器将该连接保持为活动连接,这反过来又是不必要的资源预留。这可能是什么原因?作为一种解决方案,我如何检测这种连接。我怎样才能减少这种情况 谢谢x
【问题讨论】:
-
TCP 默认没有连接超时。您需要专门启用它(使用
SO_KEEPALIVE选项)或在您自己的协议中包含某种“ping”或“keep-alive”消息。 -
非常感谢 x。但这发生在数据传输的中间,客户端似乎卡在传输中而没有从阻塞的recv返回。 so_keepalive 会有帮助吗?
-
在这种情况下,您可能需要使您的套接字非阻塞并使用轮询(例如
select)并超时。如果轮询超时,则说明有问题,您需要处理它。
标签: network-programming client-server tcp-ip