Что касается "того, как обрабатывать ошибки", вам нужно проверить, чтобы возвращаемое значение write()
было -1
, а затем, если вы хотите различать условия ошибки, посмотрите на значение errno
.
В конкретном случае SIGPIPE
это доставляется процессу, если делается попытка записи в сокет, конец чтения которого закрыт. По умолчанию доставка SIGPIPE
приведет к прекращению процесса. Если вам не нужно это поведение, вам нужно явно игнорировать SIGPIPE
(signal(SIGPIPE, SIG_IGN)
), и тогда вызов write()
вернет -1
, а errno
будет равно EPIPE
.