LINUX.ORG.RU

[networking] дескриптор одновременно в select и epoll


0

2

Можно ли на одном и том же дескрипторе делать epoll и select одновременно? Я проверил, вроде, пашет...

Это нужно для древнего проекта, хочется внедрить внутрь ихнего event loop свой с libev и epoll. Изврат потребовался из-за косяков в архитектуре. Косяки будут исправлены, но не мной и не сразу :(

★★★★★
Ответ на: комментарий от vga

Дело в том что я юзаю libev который на линухе автоматом подключит epoll. А вот на, скажем, bsd он воткнёт kqueue. И хрен его знает что будет. Правда, можно заставить юзать либу select и тогда всё будет хорошо. В общем, мне select тоже прокатит потому что сокетов максимум штук 10. Не знаю почему я на epoll заморочился.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от true_admin

А, все понял. Я как-то упустил момент с libev из начального сообщения.

vga ★★
()
Ответ на: комментарий от idle

Я боялся что уведомления от дескриптора только в одно «русло» пойдут. Но, видимо, там всё сделано умнее. И это радует.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от true_admin

> там всё сделано умнее.

конечно, иначе у нас была бы проблема с, скажем,
двумя poll'ами на одном fd, или select + poll.

epoll в этом смысле не отличается. просто вместо
default_wake_function() у нас ep_poll_callback()
которая может просто пометить fd как «ready»
(ep_is_linked) если некого будить.

fd про все это даже не подозревает, так или иначе
у него есть какой-то wait_queue_head_t (список)
где и сидят все select/poll/epoll, любое событие
разбудит всех.

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