epoll_wait: заставляя его ждать вечно

#c #linux

#c #linux

Вопрос:

Согласно справочной странице epoll_wait, описано следующее.

 int epoll_wait(int epfd, struct epoll_event *events,
                      int maxevents, int timeout);
 

В ядрах до версии 2.6.37 значение тайм-аута, превышающее приблизительно миллисекунды LONG_MAX / HZ, обрабатывается как -1 (т. е. бесконечность). Таким образом, например, в системе, где sizeof(long) равен 4, а значение ядра HZ равно 1000, это означает, что время ожидания, превышающее 35,79 минут, рассматривается как бесконечность.

В этом смысле, как бы я установил тайм-аут навсегда без каких-либо зависимостей от ядра или оборудования? приведет ли установка тайм-аута на (-1) к такому поведению?

Спасибо.

Комментарии:

1. Что говорит об этом справочная страница?

2. извини, Шон, я пропустил это.

Ответ №1:

Начиная с man epoll_wait

Указание времени ожидания -1 приводит к блокировке функции epoll_wait() на неопределенный срок, а указание времени ожидания, равного нулю, приводит к немедленному возврату функции epoll_wait(), даже если события недоступны.

Если вы хотите неопределенное ожидание, то правильным ответом будет -1 (независимо от того, какая система). Но если вы хотите подождать (на ядрах до 2.6.37, а sizeof (long) равен 4) более 35,79 минут, но меньше бесконечности, тогда вам придется разделить вызовы из-за указанной ошибки.