Каков правильный размер списка событий для kevent?

Хороший день для тебя,

Некоторое время назад я использовал API для небольшой работы с сетевым программированием. Я потерял весь свой код из-за отказа жесткого диска.

Теперь, столкнувшись с той же проблемой, я возвращаюсь к . Проблема в том, что в последнее время я использовал первичные системные вызовы для Linux. Я совсем забыл методологию с 's. Например, меня удивило, что различаются события чтения и записи на socket.

Теперь у меня такое чувство, что я не могу четко сказать, какие события группируются вместе. Например, если я получаю события процесса с разными файлами, система группирует или ставит событие в очередь? Я имею в виду, что мой ничего не говорит о том, какие данные возвращаются с fflagsкогда событие было запущено. И много таких вопросов.

Я пытаюсь добраться до сути. Проблема, которая у меня есть на данный момент, заключается в том, что epollвозвращает изменения как bitmaskи необязательное поле данных. И я привыкаю к ​​этому. Таким образом, размер возвращаемого массива событий можно определить заранее. Определенно может вернуть больше событий, чем я зарезервировал для своего списка изменений. Я имею в виду, возьмите signalс системными вызовами. В мануале четко указано, что каждый тип сигнала — это отдельное событие, но количество доставок отдельных сигналов возвращается в dataподал. Это означает, что сигналы сгруппированы, и я могу зарезервировать массив с самого начала. Я чувствую, что с процессными событиями такого не происходит. События могут быть вызваны forkи поставили в очередь. Или я ошибаюсь?

Теперь действительно к делу. Какова правильная стратегия резервирования места для возвращаемых событий? И, в качестве вспомогательного вопроса, повторяется ли событие чтения/записи в сокете при следующем вызове, когда было частичное чтение/запись?

Обновлять

Может быть, я неправильно интерпретирую поиск событий? Чтение через man, Я понимаю

EV_CLEAR После того, как событие получено пользователем, его состояние сбрасывается.

Так что отставание kqueueможет быть больше фактического размера аргумента списка событий. И другое событие будет стоять в очереди для следующего вызова?

Больше обновлений

Я неправильно понял весь процесс. я следовал FreeBSDкод справочника. И код проверяет возвращаемое значение keventбыть больше, чем максимальный размер массива. Это не соответствует мануалу. В руководстве сказано, что:

Системный вызов kevent() возвращает количество событий, помещенных в список событий, вплоть до значения, заданного nevents.

0 ответов

Другие вопросы по тегам