【发布时间】:2020-07-04 13:52:30
【问题描述】:
我正在实现一个 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)
它会影响其他线程/进程创建的其他套接字吗?
【问题讨论】:
-
setsockopt()只影响你给它的套接字。所以不,在一个套接字上设置 keep-alive 值不会影响其他套接字或整个系统 -
设置revc()的超时时间,查看文档
-
@Mannoj 您的链接没有任何相关性。如果您不这么认为,请解释。
标签: c++ c sockets network-programming