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

时间:2011-02-10 12:15:42

标签: linux sockets embedded

我在linux架构中进行编码。 我有关于套接字服务器和客户端的问题。 我已经制作了一个示例代码,其中服务器继续接受连接并且客户端连接到服务器。 如果有人已经删除网络电缆,所以我断开客户端(客户端套接字与PC断开连接),而在服务器端连接仍然活着,因为我无法通知客户端已断开连接,因为网络被拔掉。

我怎么知道客户端已断开连接?

谢谢, 尼尔

2 个答案:

答案 0 :(得分:1)

您需要在套接字上配置keepalive或发送应用程序级心跳消息,否则侦听端将无限期地等待数据包到达。如果您控制协议,应用程序级心跳可能会更容易。作为一个优点,任何一种解决方案都有助于保持网络中NAT网关之间的连接活跃。

请参阅此答案:Is TCP Keepalive the only mechanism to determine a broken link?

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

答案 1 :(得分:0)

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