Что делает poll () с таймаутом 0? - PullRequest
10 голосов
/ 10 февраля 2009

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

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

Ответы [ 3 ]

8 голосов
/ 10 февраля 2009

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

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

, по состоянию на Mac OS X 10.5;

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

, по состоянию на OpenBSD 3.8

3 голосов
/ 10 февраля 2009

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

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

С уважением,

0 голосов
/ 10 февраля 2009

Со страниц справки по Ubuntu:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...