Как остановить epoll_wait? - PullRequest
       31

Как остановить epoll_wait?

0 голосов
/ 09 февраля 2020

Я только начал кодировать в Linux, и мне нужно перенести код моего Win-сервера здесь, используя epoll. Я не могу понять, как остановить epoll_wait.

epoll l oop работает в отдельном потоке (ах), а основная функция обрабатывает консольные команды. Мне нужно остановить сервер после ввода команды "выход". Простое закрытие мастер-сокета не имеет никакого эффекта. Так как же правильно остановить epoll в этом случае (возможно, заставить epoll_wait вернуть ошибку во всех потоках)?

1 Ответ

2 голосов
/ 09 февраля 2020

Обычно вы помещаете специальный файловый дескриптор в список epoll файловых дескрипторов. eventfd или труба являются хорошими кандидатами. Всякий раз, когда вам нужно прервать epoll_wait, вы даете сигнал этому файловому дескриптору, а при обработке события l oop вы проверяете этот файловый дескриптор как критерий выхода l oop.

...