我正在运行一个使用 TCP 阻塞套接字的应用程序。 TCP send()
被阻止,但 netstat
显示发送和 recv Q = 0
。
有人可以建议为什么 send()
会被阻止吗?
最佳答案
我能想到的两个原因是:
接收程序保持套接字打开但不读取数据。在这种情况下,当接收套接字缓冲区变满时,发送方无法再发送,它的套接字发送缓冲区将填满并且 send() 将阻塞。
在您最初连接后,发送方和接收方之间的网络连接被完全阻止。这通常会导致发送方套接字在超时后失败,而且这通常是不可重复的。
这两种情况都不完全符合您的 netstat 结果,但根据经验,我会说 tcp send() 不会阻塞,除非套接字发送缓冲区已满。
关于linux - TCP send() 正在阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36916672/