如果客户端调用close, 接着会给服务端发送FIN包。然而服务端并不知道客户端调用的是close还是shutdown。此时服务端如果read, 返回0,就会正常关闭。如果write, 发送的包到客户端, 而客户端调用过close了,于是会发个RST置位的包给服务端。服务端收到RST包后,OS就知道客户端这条连接是死的了。但是处于较低层的它不会主动有什么动作。而应用层的服务端程序再次调用write时,OS就会告诉服务端进程,“他已经死了”,即发送一个SIGPIPE信号给服务端进程。这个信号的缺省行为是终止进程。那服务端肯定不能同意啊,于是就设置一下信号处理函数,忽略掉SIGPIPE就行惹。
为什么服务器要给SIGPIPE设置信号处理函数SIGINT
最新推荐文章于 2022-08-02 17:36:05 发布