Ложный SIGPIPE в Linux в переполнении стека

Кто-нибудь когда-либо слышал о SIGPIPE без видимой причины? У меня есть программа, которая вылетела с SIGPIPE. Я предотвратил сбой с помощью сигнала (SIGPIPE, SIG_IGN); Из любопытства я больше ничего не делал, то есть не обрабатывал ошибок. К моему удивлению код работает нормально. Я общаюсь с другой программой через один сокет. И передача данных через сокет прекрасно работает даже после SIGPIPE. Это возможно? SIGPIPE из-за временного взлома сети?

0

Решение

Вот как сокеты работают на * nixes.

По сути, произошло то, что вы выполнили write () / send () или подобное для сокета TCP, который был сброшен узлом. По умолчанию это приведет к появлению сигнала SIGPIPE, который завершает приложение.

Обычный способ справиться с этим — просто игнорировать сигнал SIGPIPE, как вы уже сделали, и вместо этого обрабатывать возвращаемое значение ошибки из write () / send ().

Больше информации можно найти Вот, см. главы 2.19 и 2.22

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]