因此,在linux上,shutdown()可以使用参数SHUT_RD、SHUT_WR或SHUT_RDWR来仅关闭部分通信通道。但是,就发送到对等体的TCP消息而言,它是如何工作的?
在TCP状态机中,闭合以4次握手的方式工作,
(1) (2)
FIN---------->
<----------ACK
<----------FIN
ACK----------->那么当我关机(sock,SHUT_RD)或关机(sock,SHUT_WR)时,它会发送什么消息呢?
发布于 2013-02-07 12:15:50
shutdown(sd, SHUT_WR)发送FIN,对等项以确认应答作为响应。任何进一步尝试写入套接字的操作都将导致错误。但是,对等点仍然可以继续在网络上发送data.shutdown(sd, SHUT_RD):它只是将本地API设置为为套接字上的任何后续读取返回EOS。在已关闭读取的套接字上接收数据时的行为取决于系统: Unix将确认该数据并将其丢弃;Linux将确认该数据并对其进行缓冲,这最终会使发送者停顿;Windows将发出RST,发送者将其视为“对等连接重置”。发布于 2013-02-07 07:37:55
FIN数据包不必是对称的。每一端在其本地写入器关闭套接字时发送FIN。
发布于 2021-08-11 14:45:10
shutdown with end send FIN and close将关闭套接字.so任何尝试发送close套接字都将导致重置数据包。
我遇到了一些有趣的问题,发送者发送:数据包A发送Pakcet发送shutdown with write FIN shutdown read close socket
但是接收器从接收器接收到包含FIN包B ACK的乱序包A Packet,这会导致连接复位。
https://stackoverflow.com/questions/14740852
复制相似问题