首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C-检测TCP套接字中断连接

问C-检测TCP套接字中断连接
EN

Stack Overflow用户
提问于 2020-03-24 04:00:21
回答 2查看 724关注 0票数 0

我正在实现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)。

它是否影响由另一个线程/进程创建的其他套接字?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-24 10:15:48

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

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

没有,setsockopt只影响作为参数传递给它的套接字。

票数 1
EN

Stack Overflow用户

发布于 2020-03-24 08:23:21

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60824773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档