因此在linux上,shutdown()可以使用参数SHUT_RD,SHUT_WR或SHUT_RDWR来仅关闭部分通信通道.但就发送给对等体的TCP消息而言,它是如何工作的?
在TCP状态机中,关闭以4次握手的方式工作,
(1) (2)
FIN---------->
<----------ACK
<----------FIN
ACK----------->
Run Code Online (Sandbox Code Playgroud)
那么当我关机(袜子,SHUT_RD)或关机(袜子,SHUT_WR)时它会发送什么消息?
use*_*421 16
shutdown(sd, SHUT_WR)发送一个FIN,对等端用ACK响应.任何进一步尝试写入套接字都会导致错误.但是,对等体仍然可以继续发送数据.
shutdown(sd, SHUT_RD)在网络上不发送任何内容:它只是条件本地API为套接字上的任何后续读取返回EOS.在已关闭以进行读取的套接字上接收数据时的行为与系统有关:Unix将对其进行确认并将其丢弃; Linux将确认它并缓冲它,这最终将阻止发送方; Windows将发出RST,发件人将其视为"通过对等方重置连接".