繁体   English   中英

C - 检测 TCP 套接字断开的连接

[英]C - Detecting TCP socket broken connection

我正在实现一个 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)
它会影响由另一个线程/进程创建的其他套接字吗?

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

但我并不完全了解导师。 如果我在SO_KEEPALIVETCP_KEEPCNTTCP_KEEPIDLETCP_KEEPINTVL上调用setsockopt() ,导师说它将覆盖系统范围的变量(tcp_keepalive_time、tcp_keepalive_intvl、tcp_keepalive_probes)它会影响其他线程/创建的其他进程套接字吗?

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

TCP 没有提供检测未发送端连接断开的好方法。 如果设备使用的协议没有为服务器提供任何方式来检测断开的连接,则该协议已断开。 您所能做的就是实现接收超时,但这很糟糕。

协议有文档吗? 它说要做什么?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM