задумал я переписать одну подсистему с select на epoll
с целью увеличения производительности
возник такой вопрос что возвращает epoll_wait и как это использовать ?
по ману он возвращает количество дескрипторов требующих обработки
int epoll_wait(int epfd, struct epoll_event * events,
int maxevents, int timeout);
но тут для меня ряд непоняток
struct epoll_event * events,
сюда мы передаем как я понимаю массив чистых структур
и epoll_wait заполняет их данными по активным дескрипторам или как ?
а также, если у меня например есть некий объект
связанный с дескриптором есть ли какой-то способ
к примеру в структуру struct epoll_event
запихнуть на него указатель, передать в ядро через epoll_ctl
и чтобы потом epoll_wait возвращал мне дескриптор + где-то
этот мой указатель ?
иначе, если это не возможно
получаеться все равно мутная схема,
получил дескриптор и события через epoll_wait
по дескриптору нашел соответствующий объект,
обработал события......
и в общем-то каждый раз искать объект это
совсем нерационально, я понимаю что можно
сделать быстрые схемы типа хэша или массива
с индексом по дескриптору но это все равно костыли :)