Что делает poll() с таймаутом 0?

Я смотрю poll() справочная страница, и это говорит мне о поведении poll(), когда для параметра тайм-аута передаются положительные и отрицательные значения. Это не говорит мне, что произойдет, если тайм-аут 0. Любые идеи?

Глядя на epoll_wait() man page, он сообщает мне, что с тайм-аутом 0 он сразу вернется, даже если нет доступных событий. Можно ли предположить, что poll() будет вести себя одинаково?

Ответ 1

Он немедленно вернется:

Если тайм-аут больше нуля, он задает максимальный интервал (в миллисекундах), чтобы дождаться, когда какой-либо файловый дескриптор станет готовым. Если таймаут равен нулю, то poll() будет возвращаться без блокировки. Если значение тайм-аута -1, poll блокирует неопределенное время.

начиная с Mac OS X 10.5;

Максимальный интервал ожидания завершения опроса в миллисекундах. Если это значение равно 0, poll() будет немедленно возвращаться. Если это значение INFTIM (-1), poll() будет блокироваться бесконечно, пока не будет найдено условие.

начиная с OpenBSD 3.8

Ответ 2

Как я вижу, ожидание таймаута означает "наличие" таймаута. Таким образом, я бы ожидал, что poll() фактически проверит дескрипторы файлов, а затем ждет, если никто не будет готов к таймауту в 0 миллисекунд (вообще не ждать). Но дело в том, что он будет просто сигнализировать о наличии fd.

Я также проверил исходный код Linux и, насколько мне известно, так он работает: сначала вычисляет "будущую" точку ожидания, затем проверяет дескрипторы файла, а затем, если он не доступен, ожидает истечения указанного времени.

Привет,

Ответ 3

Из man-страниц Ubuntu:

Аргумент timeout указывает верхний предел времени, для которого poll() будет блокироваться в миллисекундах. Указание отрицательного значения в тайм-ауте означает бесконечный тайм-аут.

Поскольку нет специального случая для 0, я бы предположил, что poll() будет блокировать в течение 0 миллисекунд.