首页 > 其他 > 详细

【bug-004】【tcp】网络断开重连后,客户端recv函数一直阻塞,不会返回

时间:2019-11-27 00:47:41      阅读:300      评论:0      收藏:0      [点我收藏+]
【前提】客户端采用tcp阻塞模式
【现象】与相机设备建立连接后,偶尔出现几次突然就收不到相机发过来的数据;几经排查,怀疑跟网络波动有关,于是通过插拔网线来模拟网络波动,果然bug复现。

【原因】(个人理解)每一个节点(包括服务器、客户端、中间节点)都应该会用一个五元组(源IP、源端口、目的IP、目的端口和协议)来纪录一个tcp会话,哪一个节点出现网络波动,那么该节点的纪录就会被清空。所以网络恢复后,服务器端(相机)发来的数据就不会到达客户端,客户端则一直阻塞在recv函数。

【解决方案】
1、换成非阻塞模式;
2、阻塞+保活。
这样,就可以利用函数返回值来判断是否需要重连了。

【bug-004】【tcp】网络断开重连后,客户端recv函数一直阻塞,不会返回

原文:https://blog.51cto.com/2820302/2453878

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!