2009-02-09 10 views
10

Estoy viendo poll()man page, y me dice el comportamiento de poll() cuando los valores positivos y negativos se pasan para el parámetro de tiempo de espera. No me dice lo que sucede si el tiempo de espera es 0. Alguna idea?¿Qué hace poll() con un tiempo de espera de 0?

Mirando el epoll_wait()man page, me dice que con un valor de tiempo de espera de 0, devolverá de inmediato, incluso si no hay eventos disponibles. ¿Es seguro asumir que poll()se comportaría de la misma manera?

Respuesta

8

Se devolverá inmediatamente:

Si el tiempo de espera es mayor que cero, se especifica un intervalo máximo (en milisegundos) que espera por cualquier descriptor de archivo esté listo. Si el tiempo de espera es cero, entonces poll() regresará sin bloqueo. Si el valor del tiempo de espera es -1, el poll bloquea indefinidamente.

, a partir de Mac OS X 10.5;

Intervalo máximo de espera para completar la encuesta, en milisegundos. Si este valor es 0, poll() regresará inmediatamente. Si este valor es INFTIM (-1), poll() se bloqueará indefinidamente hasta que se encuentre una condición.

, a partir de OpenBSD 3.8

0

Desde las páginas del manual de Ubuntu:

El argumento timeout especifica un límite superior en el tiempo durante el cual() bloqueará encuesta, en milisegundos. Especificar un valor negativo en el tiempo de espera significa un tiempo de espera infinito.

Como no existe un caso especial para 0, supongo que poll() se bloqueará durante 0 milisegundos.

1

Tal como lo veo, a la espera de un tiempo de espera significa "tener" un tiempo de espera. De esta manera, esperaría que poll() en realidad compruebe los descriptores de archivos, y luego espere si nadie está listo para un tiempo de espera de 0 milisegundos (sin esperar nada). Pero el caso es que solo indicará si un fd está disponible.

También verifiqué el código fuente de Linux y, a mi entender, esta es la forma en que funciona: primero calcula el punto de espera "futuro", luego verifica los descriptores de archivos, luego, si no hay ninguno disponible, espera el tiempo de espera especificado.

Saludos,

Cuestiones relacionadas