Linux:套接字关闭()与关闭()

标签 linux tcp

因此在 linux 上,shutdown() 可以使用参数 SHUT_RD、SHUT_WR 或 SHUT_RDWR 来仅关闭部分通信 channel 。但就发送到对等方的 TCP 消息而言,它是如何工作的?

在 TCP 状态机中,关闭以 4 次握手方式进行,

(1)           (2)
FIN---------->

   <----------ACK
   <----------FIN

ACK----------->

那么当我关闭(sock,SHUT_RD)或关闭(sock,SHUT_WR)时它会发送什么消息?

最佳答案

  1. shutdown(sd, SHUT_WR) 发送 FIN,对等方用 ACK 响应。任何进一步写入套接字的尝试都会导致错误。但是对端仍然可以继续发送数据。

  2. shutdown(sd, SHUT_RD) 在网络上不发送任何内容:它只是调节本地 API 以返回 EOS 以供套接字上的任何后续读取。在为读取而关闭的套接字上接收数据时的行为是系统相关的:Unix 将确认并丢弃它; Linux 将确认它并对其进行缓冲,这最终将使发送方停止; Windows 将发出 RST,发送方将其视为“对等方重置连接”。

关于Linux:套接字关闭()与关闭(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14740852/

相关文章:

linux - 监控配置 |总 CPU |语法错误 |

linux - Symfony2 缓存重建 - 写权限失败

perl - 为什么我不能从 Perl 连接到 postgres?

c++ - TCP推拉套接字服务器设计

linux - sudo 忽略从同一脚本发送的 SIGTERM

linux - 为什么使用带有特定命令的 SSH 时远程主机中没有 shell 进程?

linux - skb->priority 和 IP::tos 和 ping -Q

wcf - 在 .net 中开发一个能够在 tcp 端口上监听数据的服务

database - 在 Go 中为 SQL 连接设置 TCP 超时

tcp - 如何计算 MSS