【问题标题】:How to know Socket client got disconnected?如何知道 Socket 客户端已断开连接?
【发布时间】:2011-03-01 05:31:37
【问题描述】:

我正在使用 linux 架构进行编码。 我对套接字服务器和客户端有疑问。 我制作了一个示例代码,其中服务器继续接受连接并且客户端连接到服务器。 如果有人以某种方式移除了网络电缆,所以我在服务器端连接仍然存在时断开客户端(客户端套接字与 PC 断开连接),因为我无法通知客户端已断开连接,因为网络已拔出。

我如何知道客户端已断开连接?

谢谢, 尼尔

【问题讨论】:

    标签: linux sockets embedded


    【解决方案1】:

    你需要在socket上配置keepalive或者发送一个应用级的心跳消息,否则监听端会无限期地等待数据包到达。如果控制协议,应用程序级心跳可能会更容易。有利的一面是,这两种解决方案都有助于在网络中的 NAT 网关之间保持连接。

    看到这个答案:Is TCP Keepalive the only mechanism to determine a broken link?

    另请参阅此 Linux 文档:http://tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/#programming

    【讨论】:

      【解决方案2】:

      本地套接字的 SIGPIPE 和每个套接字类型的 eof 读取。

      【讨论】:

      • 我在读取时出错,而一个线程在读取时被阻塞,但并不总是我在读取时出错。找出套接字断开的准确方法是什么?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 2019-02-23
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 2018-02-20
      相关资源
      最近更新 更多