c++ - 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)
它会影响由另一个线程/进程创建的其他套接字吗?
解决方案
TCP 保持活动功能确实允许您检测断开的连接。您需要为您的套接字显式启用它并更改默认值,以便它更早地检测到断开的连接,就像您的导师指示您的那样。
但是我不完全理解导师。如果我调用
setsockopt()
,SO_KEEPALIVE
,TCP_KEEPCNT
,TCP_KEEPIDLE
,TCP_KEEPINTVL
导师说它将覆盖系统范围的变量 (tcp_keepalive_time, tcp_keepalive_intvl, tcp_keepalive_probes) 它会影响另一个线程/进程创建的其他套接字吗?
它不会,setsockopt
只会影响您作为参数传递给它的套接字。
推荐阅读
- python - 匹配行并获取值作为列表
- bash - 遍历 git diff --name-only 文件和操作
- postman - 在邮递员测试中,如何确定一个值是否设置为另一个值等于某个值?
- reactjs - 我需要访问登录时最初存储在 redux 商店中的用户信息。我该怎么做?反应减少
- java - 如何找到切换按钮崩溃的原因?
- flutter - 如何控制流构建器何时在 Firebase 中接收新文档?
- php - PHP在页面上创建隐藏的超链接
- reactjs - 随着道具的变化,打字稿中另一个道具的类型也会发生变化
- javascript - 如果 input[type="file"] 上传了文件,JS / React 中有没有办法执行代码
- docker - 自定义 Databricks 集群中缺少工作区目录