2016-02-15 5 views
0

Как вызвать событие EPOLLRDHUP на моем TCP сокет, используя другую нить Programatically,Создание EPOLLRDHUP событие на сокет TCP

Я добавил Epoll экземпляр с событием EPOLLRDHUP и попытались создать событие, но оно изменяет событие на этом FD, не запускать его,

Я хочу, чтобы мой первый поток, который постоянно ждет события с epoll_wait(), должен получать событие от EPOLLRDHUP, как только запускается другой поток, я не могу чтобы узнать, как вызвать это событие, я попытался использовать системный вызов write в другом потоке, но также не запускать событие на сокете FD. Думаю, опрос должен выйти из цикла блокировки - это мое требование, пожалуйста, помогите , Благодаря.

ответ

0

Вы не можете генерировать события epoll в одном дескрипторе файла из другого потока, EPOLLRDHUP будет сгенерирован на основе чего-то, происходящего на другом конце TCP-соединения.

Если у вас есть 1 нить ожидания на epoll_wait() и вы хотите, чтобы разбудить эту нить с другого потока, вы должны создать pipe(), ваш epoll_wait ждать чтения событий на чтение стороне трубы в дополнение к любому Сокеты TCP. Когда вы хотите просыпать свою нить, вы пишете байт на стороне письма трубы.

(a eventfd может использоваться вместо трубы для достижения того же самого)