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
完成它的“生命”。
如何在Linux套接字程序中清除shutdown()
系统调用设置的标志?
我想启用对套接字的写入,该套接字现在通过 shutdown(sockfd, SHUT_WR)
调用锁定写入。
很遗憾,你问的是不可能的。
发出 shutdown( sockfd, SHUT_WR );
,事实上,强制发送 FIN
数据包。
查看 TCP 状态机:
如您所见,当从活动套接字(状态ESTABLISHED
)发送FIN
数据包时,会达到状态CLOSE_WAIT
,这是一个无法改变的转换“未完成” 以任何方式。
所以这不是“删除标志”的问题:套接字被设置为导致其关闭的不可逆路径,只等待最后一个ACK
完成它的“生命”。