TCP连接Recv-Q高是什么原因?

Neo*_*ang 5 sockets netstat tcp amqp

在我的应用程序中,我发现send()TCP 连接上的调用偶尔会被阻止。每当这种情况发生时,TCP 连接的 Recv-Q 从netstat输出中会非常高:

tcp   314238      0 10.8.8.21:47302         10.8.8.11:5672          ESTABLISHED
tcp   313276      0 10.8.8.21:47294         10.8.8.11:5672          ESTABLISHED
Run Code Online (Sandbox Code Playgroud)

什么可能导致 TCP 连接的接收缓冲区被填满?它如何导致我的send()呼叫无限期挂起?

ps 这可能相关,也可能不相关,这个 TCP 连接位于我的应用程序和 RabbitMQ 服务器之间。

Arm*_*ali -1

什么可能导致 TCP 连接的接收缓冲区被填满?它是如何导致我的 send() 调用无限期挂起的?

假设你有同一个线程调用send()recv(),当它在调用中被阻塞时send(),它自然就无法调用recv(),接收到的数据必须排队。因此,并不是由于填充了接收缓冲区而导致send()挂起 - 而是相反。