码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-11-27 01:00:06      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:模式   会话   recv   连接   端口和协议   通过   拔网线   阻塞   一个   

【前提】客户端采用tcp阻塞模式
【现象】与相机设备建立连接后,偶尔出现几次突然就收不到相机发过来的数据;几经排查,怀疑跟网络波动有关,于是通过插拔网线来模拟网络波动,果然bug复现。

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

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

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

标签:模式   会话   recv   连接   端口和协议   通过   拔网线   阻塞   一个   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!