Кто-нибудь когда-либо слышал о SIGPIPE без видимой причины? У меня есть программа, которая вылетела с SIGPIPE. Я предотвратил сбой с помощью сигнала (SIGPIPE, SIG_IGN); Из любопытства я больше ничего не делал, то есть не обрабатывал ошибок. К моему удивлению код работает нормально. Я общаюсь с другой программой через один сокет. И передача данных через сокет прекрасно работает даже после SIGPIPE. Это возможно? SIGPIPE из-за временного взлома сети?
Вот как сокеты работают на * nixes.
По сути, произошло то, что вы выполнили write () / send () или подобное для сокета TCP, который был сброшен узлом. По умолчанию это приведет к появлению сигнала SIGPIPE, который завершает приложение.
Обычный способ справиться с этим — просто игнорировать сигнал SIGPIPE, как вы уже сделали, и вместо этого обрабатывать возвращаемое значение ошибки из write () / send ().
Больше информации можно найти Вот, см. главы 2.19 и 2.22
Других решений пока нет …