Я программирую http-сервер. Существует главный демон, порождающий группу слушателей, которые являются потоками или процессами, в зависимости от пользовательских настроек. После создания слушателя ему передается дескриптор сокета, и его задача - просто прослушивать соединения (дух). Семафор оборачивает вызов к listen
, чтобы избежать эффекта громового стада.
Моя проблема в том, как выйти из сервера. В этой ситуации, когда слушатели заблокированы на семафоре, как демон скажет им закрыться? Демон не может просто убить их, может быть, кто-то отвечает на запрос ...
Я хочу максимально упростить дизайн, но не могу найти решение этой проблемы.
Вот несколько уродливых обходных путей:
- Установить таймаут для семафора. Просыпайся. Должен ли я закрыть? Нет? Хорошо, снова спать;
- Просто убей их;
- Массив логических значений в разделяемой памяти, то есть отвечающий / заблокированный, демон соответственно убивает. Пока лучшее, но не так просто.
Что вы говорите?
Благодаря.