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

标签 linux sockets embedded

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

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

谢谢, 尼尔

最佳答案

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

查看此答案:Is TCP Keepalive the only mechanism to determine a broken link?

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

关于linux - 如何知道 Socket 客户端断开连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4956940/

相关文章:

C# 从套接字读取错误的数据

c - ADC通过PWM信号问题

c++ - 编译时数据段太大

linux - 在 openstack 上安装多个实例时没有免费的 nbd 设备

linux - 在不重新启动的情况下重新启动 KDE

close() 没有正确关闭套接字

c - 在 C 中制作一个 makefile

安卓java.net.SocketException : socket failed: EACCES (Permission denied)

c++ - unix 中 select 和 poll 系统调用的功能区别

linux - 使用awk读取数字