сколько памяти будет выделено для указателя событий в epoll_wait

Я пытаюсь понять указатель событий в epoll_wait. Когда epoll_wait возвращает значение, указывает ли этот указатель на некоторую память (не выделенную пользователем), где присутствуют все структуры событий? Или нам нужно выделить память для этого указателя, а затем передать указатель, чтобы события заполнялись в этой области памяти?

Если память должна быть выделена, то сколько должно быть выделено? Допустим, я хочу выполнить epoll_wait на 10 000 сокетов. Все они должны быть проверены на считывание данных (EPOLLIIN). Итак, должен ли я выделять память, эквивалентную 10 000 структур событий, для *events?

Спасибо,

ВСН


person VSN    schedule 27.06.2012    source источник


Ответы (2)


Вы смотрели на пример, например. страницу руководства epoll(7)? Вам необходимо предоставить фактический массив событий либо в виде правильного массива, как в примере, либо путем выделения кучи (и ее освобождения позже).

person Some programmer dude    schedule 27.06.2012
comment
Я не видел этого... Я смотрел на другой kernel.org/doc/man-pages/online/pages/man2/epoll_wait.2.html. Это означает, что я должен предоставить столько структур событий (в виде массива или памяти в куче), сколько сокетов, на которых я буду выполнять epoll_wait. Правильно? - person VSN; 27.06.2012
comment
Я думал, что MAXEVENTS — это количество событий, которые я ожидаю установить. Например, EPOLLIN — это одно событие, EPOLLOUT — другое. Я ошибся? - person VSN; 27.06.2012
comment
@VSN Что касается вашего первого вопроса, да, это правильно. Если подумать, однажды я создал сервер с массивом событий epoll, который перераспределялся каждый раз, когда клиент подключался/отключался. Однако кода не осталось. По второму вопросу не помню. Это битовое поле, поэтому вы можете получить два события в одной структуре событий. - person Some programmer dude; 27.06.2012
comment
Большое спасибо! Действительно помогло. Да, оказывается, что maxevents должно быть количеством сокетов, которые вы ожидаете установить, где битовое поле будет указывать более одного события (EPOLLIN, EPOLLOUT и т. д.). Кроме того, ваш ответ был подтвержден stackoverflow.com/questions/2969425/epoll-wait-maxevents?rq=1 - person VSN; 27.06.2012

MaxEvents - это размер вашего массива в элементах. Если вы выделяете память sizeof(epoll_event) * 10, то maxEvents равно 10. MaxEvents не зависит от количества прослушиваемых вами сокетов.

person Danial Gibson    schedule 08.02.2015