
我在C上编写了一个程序,在这个程序里,客户端向服务器发送了一次信息。 我使用TCP套接字。有一段时间服务器计算,应该发送结果给客户端。 如何检测服务器或客户端上的连接是否中断?
聚集windows事件查看器事件
如何在后面的代码中更改VirtualizingStackPanel的方向?
用于公用Datatable的C#SQL查询
加载一个DLL不止一次?
C / C ++ windows – ExtractIcon()不检索所有可执行文件的图标
你可能想尝试TCP Keepalive。
# cat /proc/sys/net/ipv4/tcp_keepalive_time 7200 # cat /proc/sys/net/ipv4/tcp_keepalive_intvl 75 # cat /proc/sys/net/ipv4/tcp_keepalive_probes 9`
在上面的例子中,TCP保活定时器在7200秒的空闲时间后启动。 如果保持活动消息不成功,则以75秒为间隔重试。 连续9次重试失败后,连接将被关闭。
可以在启动时通过将启动脚本放置在/etc/init.d来修改存活时间。
我知道一个确定TCP连接已经死亡的程序的唯一方法是尝试发送一些东西。 尝试将超时或返回一个错误条件。 因此,该程序不需要做任何特别的事情 – 只要发送它设计的东西发送。 但是,它确实需要处理所有可能的错误情况。 如果超时,可能会在有限的时间内重试,或者确定连接已经死亡。 如果多次发送相同的数据将是有害的,后一种情况是适当的。 在此或错误情况之后,程序应关闭当前连接,并在适当情况下重新建立连接。
TCP Keep-Alive是确定对等体是否死亡的可靠方法。也就是说,如果对等应用程序退出而没有正确关闭打开的TCP连接。
http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overvIEw.HTML
了解如何使用setsockopt调用为每个套接字启用tcp keep-alives(SO_KEEPAliVE)。
另一种方法是客户端和服务器应用程序定期检测心跳。 没有到达心跳应该表明对方已经死亡。
总结以上是内存溢出为你收集整理的我如何检测在Linux上的TCP死连接?全部内容,希望文章能够帮你解决我如何检测在Linux上的TCP死连接?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)