#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 минут, но меньше бесконечности, тогда вам придется разделить вызовы из-за указанной ошибки.