关于SIGPIPE导致的socket服务端程序意外退出的问题

在Linux C网络编程中,会遇到这样的问题。当创建了一个套接字并listen之后,等待客户端发来请求并accept,此时向客户端回传信息(用write或send)会导致服务端程序意外退出。通过监控发现时在执行write或send的时候程序意外退出。

经过研究发现,程序意外退出不是偶然,在每次客户端连接并向客户端返回数据的时候都会退出。原因:建立了socket连接后,如果长时间不用,会被
断开,这时候如果再调用send或write()函数,linux内核会给进程发出SIGPIPE信号,该信号缺省的处理办法是终止进程。

解决方法:

#include<signal.h>

在main函数中加入

signal(SIGPIPE,SIG_IGN);

即可解决问题。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.