2009-02-09 29 views
10

Sto guardando il poll()man page e mi dice il comportamento di poll() quando vengono passati valori positivi e negativi per il parametro di timeout. Non mi dice cosa succede se il timeout è 0. Qualche idea?Che cosa fa poll() con un timeout di 0?

Guardando il epoll_wait()man page, mi dice che con un valore di timeout di 0, si tornerà subito, anche se non ci sono eventi disponibili. È sicuro assumere che poll()si comporterebbe allo stesso modo?

risposta

8

Esso ritornerà immediatamente:

Se timeout è maggiore di zero, si specifica un intervallo massimo (in millisecondi) di attesa per ogni descrittore di file sia pronto. Se il timeout è zero, allora poll() ritornerà senza bloccare. Se il valore di timeout è -1, i blocchi poll indefinitamente.

, a partire da Mac OS X 10.5;

Intervallo massimo per attendere il completamento del sondaggio, in millisecondi. Se questo valore è 0, poll() verrà restituito immediatamente. Se questo valore è INFTIM (-1), poll() verrà bloccato a tempo indeterminato fino a quando non viene trovata una condizione.

, come di OpenBSD 3.8

0

Dalle pagine Ubuntu:

L'argomento timeout specifica un limite superiore sul tempo in cui poll() bloccherà, in millisecondi. Specificare un valore negativo nel timeout significa un timeout infinito.

Poiché non esiste alcun caso speciale per 0, suppongo che poll() bloccherà per 0 millisecondi.

1

Secondo me, in attesa di un timeout significa "avere" un timeout. In questo modo mi aspetterei che il polling() in realtà controlli i descrittori di file, quindi attende che nessuno sia pronto per un timeout di 0 millisecondi (nessuna attesa). Ma il caso è che segnalerà solo se un fd è disponibile.

Ho anche controllato il codice sorgente di Linux e, a mia conoscenza, questo è il modo in cui funziona: prima calcola il punto di attesa "futuro", quindi controlla i descrittori di file, quindi se nessuno disponibile, attende il timeout specificato.

Cordiali saluti,