我知道,当对等端的套接字关闭时,会抛出断管错误.
但是,在我的测试中,我注意到,当对等端关闭时,在该端立即"发送"调用并不总是会导致断管错误.
例如:
在关闭对等端的套接字之后(我已经通过调用Closetry 了干净的关闭,并且通过杀死对等方try 了异常关闭),如果我try 发送40个字节,那么我不会得到一个断开的管道,但是,如果我try 发送40000个字节,那么它会立即给出断开管道的错误.
究竟是什么原因导致管道破裂,其行为是否可以预测?
我知道,当对等端的套接字关闭时,会抛出断管错误.
但是,在我的测试中,我注意到,当对等端关闭时,在该端立即"发送"调用并不总是会导致断管错误.
例如:
在关闭对等端的套接字之后(我已经通过调用Closetry 了干净的关闭,并且通过杀死对等方try 了异常关闭),如果我try 发送40个字节,那么我不会得到一个断开的管道,但是,如果我try 发送40000个字节,那么它会立即给出断开管道的错误.
究竟是什么原因导致管道破裂,其行为是否可以预测?
观察网络关闭可能需要时间——总时间名义上约为2分钟(是的,分钟!)在关闭之后,发送到端口的数据包都被认为是死的.在某个点检测到错误情况.通过一次小的写入,您就在系统的MTU内,因此消息将排队等待发送.如果写得很大,你比MTU大,系统会更快地发现问题.如果忽略SIGPIPE信号,则函数将在检测到连接断开时的某个点上返回断开管道的EPIPE错误.