【发布时间】:2011-03-01 05:31:37
【问题描述】:
我正在使用 linux 架构进行编码。 我对套接字服务器和客户端有疑问。 我制作了一个示例代码,其中服务器继续接受连接并且客户端连接到服务器。 如果有人以某种方式移除了网络电缆,所以我在服务器端连接仍然存在时断开客户端(客户端套接字与 PC 断开连接),因为我无法通知客户端已断开连接,因为网络已拔出。
我如何知道客户端已断开连接?
谢谢, 尼尔
【问题讨论】:
我正在使用 linux 架构进行编码。 我对套接字服务器和客户端有疑问。 我制作了一个示例代码,其中服务器继续接受连接并且客户端连接到服务器。 如果有人以某种方式移除了网络电缆,所以我在服务器端连接仍然存在时断开客户端(客户端套接字与 PC 断开连接),因为我无法通知客户端已断开连接,因为网络已拔出。
我如何知道客户端已断开连接?
谢谢, 尼尔
【问题讨论】:
你需要在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
【讨论】:
本地套接字的 SIGPIPE 和每个套接字类型的 eof 读取。
【讨论】: