当使用 socket 进行网络连接时,如果连接中断,而另一端仍然向对方写数据,第一次写数据后会收到RST响应,此后再写数据,内核将向进程发出SIGPIPE信号,通知进程此连接已经断开。而SIGPIPE信号的默认处理是终止程序
解决办法:
1.己方忽略SIGPIPE信号
signal(SIGPIPE, SIG_IGN);
2.己方socket在建立之初就设置不发送该消息
int value = 1;
setsockopt(sock, SOL_SOCKET, SO_NOSIGPIPE, &value, sizeof(value));