socket的关闭有close 和shutdown两种API,那么他们的区别在哪里呢?
close ----- 在多进程的情况下,关闭本进程的socket id,但链接还是开着的,用这个socket id的其它进程还能用这个链接,能读或写这个socket id,直到所有的进程都进行了 close,才真正关闭这个套接字,但当他真正执行关闭的时候是完全关闭,既不处理发送也不处理接收数据,如果对端发送数据过来会收到RST消息。
shutdown -- 即便在多进程的情况下面,也是直接进行关闭的,破坏了socket 链接,其他进程的链接也会被关闭,但他关闭的时候只关闭一般,即发送数据通道关闭,接收数据还 是可以的。如果写则可能会收到一个SIGPIPE信号,这个信号可能直到socket buffer被填充了才收到。
本文深入探讨了socket的close和shutdown API的区别,包括它们在多进程环境下的行为,以及如何影响socket连接。重点阐述了close仅关闭本进程的socket连接,而shutdown仅关闭发送端,保留接收端;同时解释了shutdown可能导致的SIGPIPE信号。
1014

被折叠的 条评论
为什么被折叠?



