网络编程中的SIGPIPE信号

393 阅读1分钟

为什么会出现SIGPIPE信号

在网络编程中经常会出现SIGPIPE信号,默认情况下这个信号会终止整个进程。
如果一个socket收到RST packet之后,依旧向这个socket写入数据,那么就会产生SIGPIPE信号。
这种现象很常见,例如,客户端连接到服务器后,在正常的数据通信的过程中,如果客户端进程突然崩溃,那么服务器的进程就会产生SIGPIPE信号。

怎么解决SIGPIPE信号

SIGPIPE信号的出现会使服务器的进程被杀死。
然而,服务器并不希望进程被杀死,那么就需要忽略这个信号

void addsig(int sig, void(*handler)(int)) {
	struct sigaction sa;
	memset(&sa, '\0', sizeof(sa));
	sa.sa_handler = handler;
	sigfillset(&sa.sa_mask);
	sigaction(sig, &sa, NULL);
}


// 对SIGPIPE信号进行处理
addsig(SIGPIPE, SIG_IGN);