首页 > 解决方案 > C - 检测 TCP 套接字断开的连接

问题描述

我正在实现一个 tcp 服务器套接字。服务器与另一个设备中的客户端套接字通信。
问题是:如果连接突然断开(电缆被移除),recv() 函数没有返回。
我无法实现乒乓(心跳)机制,因为我不控制设备实现。
在网上搜索了一段时间后,我找到了这个教程:http
://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html 但我并不完全理解导师。如果我在 SO_KEEPALIVE、TCP_KEEPCNT、TCP_KEEPIDLE、TCP_KEEPINTVL 上调用 setsockopt(),导师说它将覆盖系统范围的变量(tcp_keepalive_time、tcp_keepalive_intvl、tcp_keepalive_probes)
它会影响由另一个线程/进程创建的其他套接字吗?

标签: c++csocketsnetwork-programming

解决方案


TCP 保持活动功能确实允许您检测断开的连接。您需要为您的套接字显式启用它并更改默认值,以便它更早地检测到断开的连接,就像您的导师指示您的那样。

但是我不完全理解导师。如果我调用setsockopt(), SO_KEEPALIVE, TCP_KEEPCNT, TCP_KEEPIDLE,TCP_KEEPINTVL导师说它将覆盖系统范围的变量 (tcp_keepalive_time, tcp_keepalive_intvl, tcp_keepalive_probes) 它会影响另一个线程/进程创建的其他套接字吗?

它不会,setsockopt只会影响您作为参数传递给它的套接字。


推荐阅读