网络编程-socket编程,如何及时检测出对方连接已经异常断开?
网络连接的另外一方,如果因为异常或者断电等原因,导致连接断开,本方一般无法及时发现,往往在本方再一次向对方发包的时候才报错说连接断开。那么,有哪些方法可以保证及时发现对方异常断开连接呢?
目前听说的方法是心跳检测,即,每隔一段时间收发一个心跳包和ACK,无形中增加了网络包的数量,还有更好的方法么
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
recv函数中有描述
The return value will be 0 when the peer has performed an orderly shutdown.
应该可以用recv() == 0 来判断对端断开连接吧。
http://linux.die.net/man/2/recv
可以采用tcp 的keeplive机制,不过它的原理也是采用了心跳包的方法,但是开销真的不大。keeplive详细的用法可以参考这里 http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/
recv方法貌似不能检测断电和拔网线这类的断开情况