The process received a SIGPIPE. The default behaviour for this signal is to end the process.
A SIGPIPE is sent to a process if it tried to write to a socket that had been shutdown for writing or isn’t connected (anymore).
To avoid that the program ends in this case, you could either
-
make the process ignore
SIGPIPE#include <signal.h> int main(void) { sigaction(SIGPIPE, &(struct sigaction){SIG_IGN}, NULL); ...or
-
install an explicit handler for
SIGPIPE(typically doing nothing):#include <signal.h> void sigpipe_handler(int unused) { } int main(void) { sigaction(SIGPIPE, &(struct sigaction){sigpipe_handler}, NULL); ...
In both cases send*()/write() would return -1 and set errno to EPIPE.