当客户端close关闭连接时,若server端接着发送数据,根据TCP协议的规定,server端会收到RST响应,当server端再次往客户端发送数据时,系统会发出一个SIGPIPE信号给server进程,告诉server进程,对端连接已经关闭了,不要再写数据了。然而,根据信号的默认规则,SIGPIPE信号的默认处理动作是terminate(终止),所以server进程会结束。这样就造成了服务器因客服端的关闭而关闭。
商业开发中,这种情况是不能被允许的。避免这种情况的方法是忽略SIGPIPE信号,即在代码中加上这样一句“signal(SIGPIPE,SIG_IGN)”。
时间: 2024-10-06 00:16:02