我正在运行一个我正在使用TCP阻塞套接字的应用程序。 TCP send()
已被屏蔽,但netstat
正在显示发送和recv Q = 0
。
有人可以建议为什么会send()
被阻止吗?
答案 0 :(得分:0)
我能想到的两个原因是:
接收程序保持套接字打开但不读取数据。在这种情况下,当接收套接字缓冲区变满时,发送方不能再发送,它的套接字发送缓冲区将填满,send()将阻塞。
初次连接后,发件人和收件人之间的网络连接完全被阻止。这会导致发送方套接字通常在超时后失败,这通常也不会重复。
这两种情况都不完全符合你的netstat结果,但根据经验我会说除非套接字发送缓冲区已满,否则tcp send()不会阻塞。