Network programming 检测服务器中的空闲连接

Network programming 检测服务器中的空闲连接,network-programming,client-server,tcp-ip,Network Programming,Client Server,Tcp Ip,我在windows操作系统上设计、编程并实现了一个基于IO重叠网络编程模式的服务器应用程序。它与预期的性能很好地工作,可以观察到,在任意选择的客户机中,有时什么都没有发生,数据传输似乎被冻结。它甚至不会生成任何TCP/IP错误条件,例如超时或任何错误。在这种情况下,服务器将该连接维护为活动连接,而活动连接又会保留不必要的资源。这可能是什么原因??作为解决方案,我如何检测这种连接。我怎样才能减少这种情况 谢谢 原因可能是什么 客户端已停止发送或接收,您的问题不清楚是哪一个 作为解决方案,我如何检测

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

原因可能是什么

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

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


如果正在读取,请使用读取超时;如果正在写入,请使用带定时
select()
的非阻塞模式。

TCP默认情况下没有连接超时。您需要特别启用它(使用
SO_KEEPALIVE
选项),或者在您自己的协议中包含某种“ping”或“keep alive”消息。非常感谢x。但这种情况发生在数据传输的中间,客户端似乎被困在传输中,而没有从阻塞的ReV返回。这样会有帮助吗?在这种情况下,您可能需要使套接字非阻塞,并使用轮询(例如,
select
)和超时。如果投票超时,那就是出了问题,你需要处理它。你好,谢谢大家。。很抱歉,这个问题提供了信息。我的意思是,客户端无限期地等待recv阻塞呼叫。我通过设置recv超时解决了这个问题。我仍然不明白为什么在发送了几个kbs后连接会冻结。但服务器报告整个缓冲区已被传输。它是否与网络带宽有关。如何测试与服务器的连接的稳定性