Linux Socket - 清除由 shutdown() 系统调用设置的标志

Linux Socket - Clear the flag set by shutdown() systemcall

如何在Linux套接字程序中清除shutdown()系统调用设置的标志?

我想启用对套接字的写入,该套接字现在通过 shutdown(sockfd, SHUT_WR) 调用锁定写入。

很遗憾,你问的是不可能的。

发出 shutdown( sockfd, SHUT_WR );,事实上,强制发送 FIN 数据包。

查看 TCP 状态机:

如您所见,当从活动套接字(状态ESTABLISHED)发送FIN 数据包时,会达到状态CLOSE_WAIT,这是一个无法改变的转换“未完成” 以任何方式。

所以这不是“删除标志”的问题:套接字被设置为导致其关闭的不可逆路径,只等待最后一个ACK 完成它的“生命”。