在Linux C网络编程中,会遇到这样的问题。当创建了一个套接字并listen之后,等待客户端发来请求并accept,此时向客户端回传信息(用write或send)会导致服务端程序意外退出。通过监控发现时在执行write或send的时候程序意外退出。
经过研究发现,程序意外退出不是偶然,在每次客户端连接并向客户端返回数据的时候都会退出。原因:建立了socket连接后,如果长时间不用,会被
断开,这时候如果再调用send或write()函数,linux内核会给进程发出SIGPIPE信号,该信号缺省的处理办法是终止进程。
解决方法:
#include<signal.h>
在main函数中加入
signal(SIGPIPE,SIG_IGN);
即可解决问题。