linux - TCP send() 正在阻塞

标签 linux network-programming

我正在运行一个使用 TCP 阻塞套接字的应用程序。 TCP send() 被阻止,但 netstat 显示发送和 recv Q = 0

有人可以建议为什么 send() 会被阻止吗?

最佳答案

我能想到的两个原因是:

  • 接收程序保持套接字打开但不读取数据。在这种情况下,当接收套接字缓冲区变满时,发送方无法再发送,它的套接字发送缓冲区将填满并且 send() 将阻塞。

  • 在您最初连接后,发送方和接收方之间的网络连接被完全阻止。这通常会导致发送方套接字在超时后失败,而且这通常是不可重复的。

这两种情况都不完全符合您的 netstat 结果,但根据经验,我会说 tcp send() 不会阻塞,除非套接字发送缓冲区已满。

关于linux - TCP send() 正在阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36916672/

相关文章:

c - "ssize_t wb;"中变量名的命名约定

linux - 如何在 Linux 中提取具有多种模式的行?

java - C 服务器到 Java 客户端套接字读取以短值传递

python - 扭曲的框架服务器作为客户端建立连接?

c# - HttpWebRequest.GetResponse() 返回错误 500 Internal Server Error

c# - 从 NetworkStream 调用 BeginRead

linux - 通过 Azure Devops 将 docker 镜像部署到 Linux 上的 Web 应用程序失败

linux - 从多个文件中删除重复行

android - 从android中的目录读取原始字节

python - 网络中断前的 Linux 关机/重启通知