LINUX.ORG.RU

Как организовать завершение работы сервера?


0

0

Написал простой сервер на C. Принцип работы - главный поток ждёт (функция accept()) пока к нему присоединится клиент, как только это происходит - создаёт поток который работает с клиентом, и опять ждёт нового клиента и т.д.

Требуется, чтобы при получении сигнала (например SIGINT), главный поток переставал ждать присоединения.

Кто представляет - как такое можно сделать?

Единственное, что я смог придумать, это
1. Заставить обработчик сигнала изменять переменную-флаг.
2. Сделать слушающий сокет не блокируемым, с помощью select() ждать несколько секунд присоединения, затем проверять значение флага и опять ждать и т.д.
Но это, как говорится, не труЪ. Хотелось бы, чтобы можно было "влиять" на select() также как это делают файловые дискрипторы :). Но возможно ли такое?

Re: Как организовать завершение работы сервера?

По умолчанию SIGINT прерывает системные вызовы, такие как accept. Возвратится -1 и errno установится в EINTR.

anonymous ()

Re: Как организовать завершение работы сервера?

Всем спасибо за помошь.

LinuxUser ★★ ()

Re: Как организовать завершение работы сервера?

можно создать дополнительный файловый дескриптор для этих задач. select будет ждать и сокетный дескриптор и дополнительный. когда надо остановить сервер - в дополнительный дескриптор засылается "событие".

Kpoxman ★★ ()

Re: Как организовать завершение работы сервера?

сделай ему close

cod ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.