Linux网络编程-SIGPIPE信号导致的程序退出问题

Posted Linux C/C++程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux网络编程-SIGPIPE信号导致的程序退出问题相关的知识,希望对你有一定的参考价值。

  当客户端close关闭连接时,若server端接着发送数据,根据TCP协议的规定,server端会收到RST响应,当server端再次往客户端发送数据时,系统会发出一个SIGPIPE信号给server进程,告诉server进程,对端连接已经关闭了,不要再写数据了。然而,根据信号的默认规则,SIGPIPE信号的默认处理动作是terminate(终止),所以server进程会结束。这样就造成了服务器因客服端的关闭而关闭。

  商业开发中,这种情况是不能被允许的。避免这种情况的方法是忽略SIGPIPE信号,即在代码中加上这样一句“signal(SIGPIPE,SIG_IGN)”。

以上是关于Linux网络编程-SIGPIPE信号导致的程序退出问题的主要内容,如果未能解决你的问题,请参考以下文章

Linux 网络编程详解九

关于SIGPIPE导致的程序退出

避免SIGPIPE导致的iOS应用闪退/Avoiding SIGPIPE signal crash in iOS(mach_msg_trapSIGPIPE信号)

忽略SIGPIPE信号

Java Socket 怎么忽略SIGPIPE信号

SIGPIPE信号解析