【问题标题】:Detecting idle connection in server检测服务器中的空闲连接
【发布时间】: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


【解决方案1】:

这可能是什么原因?

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

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

如果您正在阅读,请使用读取超时,或者如果您正在写作,请使用带有定时select() 的非阻塞模式。

【讨论】:

  • 大家好,谢谢大家。很抱歉,这个问题提供了很多信息。我的意思是客户端在 recv 阻塞调用中无限等待。我通过设置 recv 超时解决了这个问题。我仍然很困惑为什么在发送几个 kbs 后连接会冻结。但服务器报告整个缓冲区已被转移。是否与网络带宽有关。如何测试与服务器连接的稳定性
猜你喜欢
  • 2017-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多