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

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

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

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

    原文作者:石之湾
    原文地址: https://blog.51cto.com/2820302/2453878
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞