Я пытаюсь разработать приложение чата в c. Я использую гнезда и select()
. Но если я закрою сервер перед клиентом, у клиента появится сообщение «Broken Pipe». Я использовал select(), но я не знал, как его избежать?Как избежать сломанной трубы?
ответ
Зарегистрируйте обработчик сигнала PIPE (и, возможно, проигнорируйте сигнал).
есть ли другой способ? я не хочу поймать сигнальную трубку – heruma
@heruma: вы можете использовать 'SIG_IGN' для игнорирования' SIGPIPE'. Просто прочитайте страницу руководства или что-то в этом роде. Некоторые API также поддерживают дополнительные параметры труб, чтобы отключить доставку SIGPIPE из ядра. См. Http://stackoverflow.com/questions/108183/how-to-prevent-sigpipes-or-handle-them-properly – 2013-04-25 16:50:33
Вы можете отключить сигнал:
signal(SIGPIPE, SIG_IGN);
Хотя выбранный ответ игнорировать обработку сигнала шириной, есть и другие варианты:
Использования отправить функции с флагом MSG_NOSIGNAL:
send(con, buff_enviar+enviado, length-enviado, MSG_NOSIGNAL);
Отключение SIGPIPE на уровне гнезда (не доступно для всех ядер):
int flag = 1;
setsockopt(con, SOL_SOCKET, SO_NOSIGPIPE, &flag, sizeof(flag));
Отключение SIGPIPE для вызывающей нити (вы можете восстановить его после):
sigset_t set;
sigemptyset (&set);
sigaddset (&set, SIGPIPE);
pthread_sigmask(SIG_BLOCK, &set, NULL);
- 1. Избегайте сообщения «сломанной трубы»
- 2. сломанной трубы разделителями файл
- 3. игнорировать выход «сломанной трубы» сигнала
- 4. Причина сломанной трубы в c
- 5. сервера разработки Django ошибка сломанной трубы
- 6. python3 - ошибка сломанной трубы при использовании socket.send()
- 7. Gradle Docker плагин сломанной трубы на OSX
- 8. питон исключение обработчика HTTP сломанной трубы
- 9. Изящный способ закрытия сломанной трубы SSH на OSX?
- 10. Что означает, что исключение «сломанной трубы» означает Socket?
- 11. Spring WebSockets сломанной трубы & клиента не получают сообщения
- 12. Получение сломанной трубы при передаче mysql-соединения с потоком python
- 13. Избегайте сломанной трубы с помощью subprocess.Popen и несколько различных запросов
- 14. сломанной ошибка трубы во время захвата изображения в андроиде
- 15. Как избежать символа трубы в нефритовом?
- 16. Как избежать символа трубы ('|') в PostgreSQL
- 17. Python: ошибка сломанной трубы для PyNomo Пример (в функции номографа)
- 18. мерзавец сломанной трубы при постановка изменения в хранилище
- 19. Получение сломанной трубы при загрузке mp3 с помощью paperclip
- 20. Невозможно избежать символа трубы (|) в powershell
- 21. Как избежать символа трубы (|) для url_encode в python
- 22. Как избежать символа трубы в узле js i18n plugin
- 23. рельсы кэширование сломанной?
- 24. ObjectOutputStream.writeObject() (в верхней части socket.getOutputStream()) бросает сломанной трубы (IO Exception) при написании сериализуемая объект
- 25. У меня есть исключение «сломанной трубы», используя Sockets и Netty. Что не так?
- 26. Ремонт сломанной истории git
- 27. Импорт JSON сломанной Firebase
- 28. Chrome OSX цвет сломанной
- 29. резюме сломанной загрузки
- 30. SQL Developer план сломанной
возможно дубликат [Как предотвратить SIGPIPEs (или обрабатывать их должным образом)] (http://stackoverflow.com/questions/108183/how-to-prevent-sigpipes-or-handle-them-правильно) – 2013-04-25 16:51:33
Не просто закрывайте трубку, попрощайтесь красиво. Так что другой конец знает, чтобы закрыть его тоже. –