Я хотел бы закрыть сокет, но прежде, чем уведомить все блокировки потоков на accept/connect
, поэтому я посылаю сигнал, специфичный для пользователя, но не зная о приеме потоков, принимающих сигнал. Я не могу использовать syscall kill(pid, signal)
Есть ли способ отправить сигнал всем потокам, открывающим fd?
ответ
Почему бы просто не отключить сокет без уведомления? Каждый поток, который заблокирован при приеме или чтении из этого гнезда, вернется с соответствующей ошибкой, которую вы можете проанализировать, чтобы предпринять необходимые действия.
Я верю, что shutdown для TCP только исправляет меня, если я ошибаюсь – Bionix1441
Ум, вы правы, я не знал, что вы используете UDP. Затем вам придется использовать любые методы IPC ... названные сокеты, разделяемая память и т. Д. –
Да. Вы можете отправить сигнал всем работающим потокам через системный вызов: kill(). Используйте это как: Убить (0, signal_id) Здесь '0' представляет собой широковещательный сигнал для всего процесса. Процесс ", который зарегистрирован для широковещательного сигнала, выполнил их обработчик сигналов для дальнейших действий.
'kill()' посылает сигнал процессу. Если этот процесс многопоточен, то один из потоков процесса получит сигнал (если не заблокирован). Поэтому 'kill()' не является вариантом для обращения к конкретным *** нитям ***. – alk
- 1. Есть ли способ отправить сигнал в поток из другого процесса?
- 2. Можно ли отправить сообщение ко всем темам?
- 3. Есть ли практические альтернативы потокам?
- 4. Доступ ко всем потокам от QApplication
- 5. python - присоединиться ко всем потокам после start_new_thread
- 6. Есть ли способ найти тайм-аут fd в libevent?
- 7. Есть ли способ временно отключить fd 2 в UNIX?
- 8. Как отправить сигнал в поток в c?
- 9. Простой способ отправить сигнал только детям-детям?
- 10. mutilple таймеры, доставляющие сигнал отдельным потокам
- 11. Как отправить сигнал всем процессам из дочернего процесса?
- 12. Может ли главный() конец работать перед присоединением ко всем потокам?
- 13. Является ли Java доступ ко всем потокам автоматически?
- 14. Есть ли способ отправить СМС с сервера?
- 15. Есть ли способ отправить ключи к Windowmanager
- 16. Есть ли способ переименовать кнопку «Отправить»?
- 17. Jsch: Есть ли способ отправить управляющий символ
- 18. Есть ли способ отправить объект через UITapGestureRecognizer?
- 19. Отправить сигнал другому процессу
- 20. Есть ли способ управлять системным курсором (отправить сигнал двойного щелчка в систему)
- 21. Использование combLatest, есть ли способ узнать, какой сигнал излучал событие?
- 22. Есть ли способ получить звуковой сигнал в веб-разработке PHP?
- 23. Есть ли способ удалить конкретный сигнал из слота
- 24. Android - есть ли способ изменить сигнал WiFi на 5 ГГц?
- 25. Есть ли способ отправить HTTP-запрос ко всем экземплярам в ELS AWS?
- 26. есть ли способ доступа ко всем ссылкам на данный объект?
- 27. Есть ли способ применить [TestMethod] ко всем методам, использующим класс
- 28. Есть ли способ получить доступ ко всем уведомлениям Android?
- 29. Есть ли способ установить формат DateTime.ToString() во всем мире?
- 30. Есть ли способ дать всем объектам метод без модификации Object.prototype?
использовать 'shutdown()' как описано в http://stackoverflow.com/questions/2486335/wake-up-thread-blocked-on-accept-call – Fazlin
Вы можете просто отправить им SIGPIPE, если они попытаются написать к закрытому гнезду, или организовать, чтобы какие-либо чтения вернули индикатор, что розетка закрыта. –
Но как насчет разъемов UDP, я не могу использовать SIGPIPE – Bionix1441