Что делает 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 миллисекунд.