Мой клиент будет отправлять посылку на сервер. клиентская программа не ловит SIGPIPE.
(клиентский сервер Ubuntu 12.04 LTS)
Я делаю следующий тест:
После того, как 3 рукопожатия закончены. Затем клиент отправит несколько пакетов на сервер.
Сервер может получать пакеты нормально.
Затем я внезапно убиваю процесс сервера.
Клиентский процесс мертв. Но я не вижу ни одного лог-шоу «Разбитая труба».
Я думаю, что Баш сообщит о мертвой причине.
Почему bash не печатает журнал «Broken pipe» после завершения процесса?
Но я начинаю процесс, используя GDB, повторяю верхние шаги. процесс мертв, и GDB показывает следующий журнал:
«Программа получила сигнал SIGPIPE, Broken pipe.»
Если клиент не перехватывает SIGPIPE, он не может распечатать сообщение об ошибке! Сообщения вида «Сломанная труба» распечатываются программой, которая получает SIGPIPE в ответ на ошибку записи или в ответ на сигнал. Поскольку ваш клиент не обрабатывает SIGPIPE, он не печатает это сообщение об ошибке, а просто завершает работу. Когда вы запускаете в GDB, GDB сообщает вам, что дочерний процесс завершен из-за SIGPIPE.
Других решений пока нет …