Написал код с epoll_create1(0); epoll_ctl(); epoll_wait(); и при вызове epoll_wait(); из двух потоков с удивлением вижу, что они возвращают одинаковые сокеты.
Мне казалось, что epoll можно использовать из разных потоков. Я не прав? Как получить многопоточный epoll? Есть ли стандартное решение или он просто заменяет select() и многопоточность нужно реализовывать самому?
Ответ
Все оказывается до банальности просто, достаточно использовать флаг EPOLLONESHOT в epoll_ctl() и сокет будет выдаваться один раз.
Комментариев нет:
Отправить комментарий