Что означает код errno 32 (EPIPE)?

 
Также может означать:
КонстантаТипОС
ERROR_SHARING_VIOLATIONОшибка WindowsWindows
KERN_EXCEPTION_PROTECTEDКод возврата ядра macOSmacOS
ippStsSrcSizeLessExpectedСтатус Intel IPPЛюбая
KERNEL_APC_PENDING_DURING_EXITКод BSODWindows
Предыдущий Следующий
EMLINK EDOM

EPIPE

EPIPE возникает, когда программа пытается записать в ориентированный на соединение сокет, чей путь отправки больше непригоден. Удалённая сторона могла закрыть соединение, локальный код уже мог вызвать shutdown(..., SHUT_WR), либо транспорт обнаружил разрыв сеанса. Нельзя считать данные неудачной записи доставленными.

В Linux отправка, вернувшая EPIPE, может дополнительно породить SIGPIPE. Если процесс специально не обрабатывает и не подавляет этот сигнал, действие по умолчанию способно завершить процесс раньше обычной обработки ошибки. Linux предоставляет MSG_NOSIGNAL для отдельного вызова send; политикой SIGPIPE можно управлять и на уровне процесса или потока, но глобальное изменение затрагивает больше кода.

Рекомендуемая обработка

  • Прекратите использовать сокет, удалите его из пула соединений и создайте новое соединение для безопасного повтора.
  • Отслеживайте подтверждения прикладного протокола: запрос мог дойти до другой стороны до того, как разрыв стал заметен.
  • Запишите, последовал ли отказ за локальным shutdown, закрытием удалённой стороны, reset или записью после длительного простоя.

Linux send(2) и MSG_NOSIGNAL · POSIX sendmsg() · Руководство Linux: socket(2)


Нужно найти другой код? Найти другой код состояния или ошибки.