Linux: network: TCP: errno: EWOULDBLOCK
https://mzhan017.blog.csdn.net/article/details/108010013
这个errno的意思:
如果是send接口函数返回的错误,代表tcp socket的sending buffer满了,让应用程序等上一段时间重试send。
所以,这个产生的原因就不固定了:
可能是当前系统太忙,导致系统发包慢,buffer累积;
可能是对方接收处理慢,导致接收方的recv满,连累发送方的sending的buff累积;
可能是对方CPU太忙;上层应用处理慢;
内存使用率太高,导致上层应用申请不到内存,来不及处理消息;
可能是网络有延迟,导致消息交互慢;
一说网络有延迟,这个分析的方向就广了:
可能是硬件:网线问题;网口松动;
虚拟设备的设置问题?
…
最近遇到的一次就是网线出了问题。而且网线的导致的这个问题还不是完全断掉(如果完全断掉,那就可以一眼看出问题的原因),而是导致整体网络质量下降。幸好有很多相同产品做对比,说其他两百个相同的产品都没有问题,只有这个有问题,硬件的问题的可能性变大。
所以出现问题时,硬件质量的怀疑点也是不能少。