首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux: socket close() vs shutdown()

Linux: socket close() vs shutdown()
EN

Stack Overflow用户
提问于 2013-02-07 07:27:19
回答 3查看 6.5K关注 0票数 9

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

在TCP状态机中,闭合以4次握手的方式工作,

代码语言:javascript
复制
(1)           (2)
FIN---------->

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

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-07 12:15:50

  1. shutdown(sd, SHUT_WR)发送FIN,对等项以确认应答作为响应。任何进一步尝试写入套接字的操作都将导致错误。但是,对等点仍然可以继续在网络上发送data.
  2. shutdown(sd, SHUT_RD):它只是将本地API设置为为套接字上的任何后续读取返回EOS。在已关闭读取的套接字上接收数据时的行为取决于系统: Unix将确认该数据并将其丢弃;Linux将确认该数据并对其进行缓冲,这最终会使发送者停顿;Windows将发出RST,发送者将其视为“对等连接重置”。
票数 16
EN

Stack Overflow用户

发布于 2013-02-07 07:37:55

FIN数据包不必是对称的。每一端在其本地写入器关闭套接字时发送FIN。

票数 1
EN

Stack Overflow用户

发布于 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,这会导致连接复位。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14740852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档