2009-02-09 27 views
10

我正在查看poll()man page,它告訴我當正值和負值傳入超時參數時的行爲poll()。如果超時時間爲0,它不會告訴我會發生什麼情況。 有什麼想法?poll()在超時時間爲0時做什麼?

望着epoll_wait()man page,它告訴我,隨着0超時值時,它會立即返回,即使沒有可用的事件。假設poll()的行爲方式相同嗎?

回答

8

它會立即返回:

如果超時大於零,它指定一個最大時間間隔(毫秒)等待任何文件描述符準備就緒。如果超時爲零,則poll()將返回而沒有阻塞。如果超時值爲-1,則poll將無限期阻止。

,自Mac OS X 10.5起;

等待輪詢完成的最大時間間隔(以毫秒爲單位)。如果此值爲0,則將立即返回poll()。如果此值爲INFTIM (-1),則poll()將無限期阻止,直到找到條件。

,作爲OpenBSD 3.8

0

從Ubuntu手冊頁:

超時參數指定關於哪個 輪詢()將被阻塞,以毫秒爲單位的時間的 上限。 在超時時指定負值 表示無限超時。

因爲沒有0的特殊情況,我會假設poll()會阻塞0毫秒。

1

正如我看到它,等待超時意味着「具有」超時。這樣,我期望poll()實際上檢查文件描述符,然後等待沒有人準備好超時0毫秒(根本沒有等待)。 但是這種情況是,如果fd可用,它就會發出信號。

我也檢查了linux源代碼,據我所知,這是它的工作方式:首先計算「未來」等待點,然後檢查文件描述符,然後如果沒有可用的,則等待指定的超時時間。

Regards,

相關問題