网络编程-socket编程,如何及时检测出对方连接已经异常断开?

发布于 2016-11-05 12:08:05 字数 163 浏览 1363 评论 2

网络连接的另外一方,如果因为异常或者断电等原因,导致连接断开,本方一般无法及时发现,往往在本方再一次向对方发包的时候才报错说连接断开。那么,有哪些方法可以保证及时发现对方异常断开连接呢?

目前听说的方法是心跳检测,即,每隔一段时间收发一个心跳包和ACK,无形中增加了网络包的数量,还有更好的方法么

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

想挽留 2017-10-08 13:25:29

recv函数中有描述

The return value will be 0 when the peer has performed an orderly shutdown.
应该可以用recv() == 0 来判断对端断开连接吧。

http://linux.die.net/man/2/recv

浮生未歇 2017-03-07 07:00:38

可以采用tcp 的keeplive机制,不过它的原理也是采用了心跳包的方法,但是开销真的不大。keeplive详细的用法可以参考这里 http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/
recv方法貌似不能检测断电和拔网线这类的断开情况

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文