クローズされたPIPE(含、ネットワークソケット)にアクセスすると、アクセスしたプロセス(アプリ)に対して、SIGPIPEシグナルが通知される。
デフォルトではSIGPIPEシグナルを受信したプロセスは強制終了される。
強制終了を回避するためには、以下のいずれかの対策を取る必要がある。
- SIGPIPEシグナルを無視する設定を与える
- 全面的に無視する
1signal(SIGPIPE, SIG_IGN); - ソケット個別に無視する。
12int value = 1;setsockopt(sock, SOL_SOCKET, SO_NOSIGPIPE, &value, sizeof(value));
- 全面的に無視する
- SIGPIPEシグナルをハンドラで処理する