poll() man pageを見ているpoll()と、timeout パラメータに正と負の値が渡されたときの動作がわかります。タイムアウトが の場合に何が起こるかはわかりません0。何か案は?
epoll_wait() man ページを見ると、タイムアウト値が の0場合、使用可能なイベントがなくてもすぐに戻ることがわかります。それが同じように振る舞うと仮定しても安全ですか?poll()
すぐに戻ります:
timeout が 0 より大きい場合は、ファイル記述子の準備が整うまで待機する最大間隔 (ミリ秒単位) を指定します。タイムアウトがゼロの場合、
poll()ブロックせずに戻ります。timeout の値が の場合、 は無期限-1にpollブロックします。
、現在Mac OS X 10.5;
ポーリングが完了するまで待機する最大間隔 (ミリ秒)。この値が 0 の場合、
poll()すぐに戻ります。この値がINFTIM (-1)の場合poll()、条件が見つかるまで無期限にブロックされます。
、現在OpenBSD 3.8
私が見ているように、タイムアウトを待つということは、タイムアウトを「持つ」ことを意味します。このように、poll()が実際にファイル記述子をチェックし、0ミリ秒のタイムアウトの準備ができていない場合(待機なし)に待機することを期待します。ただし、fdが使用可能かどうかを通知するだけの場合があります。
Linuxのソースコードもチェックしました。私の知る限り、これが機能する方法です。最初に「将来の」待機ポイントを計算し、次にファイル記述子をチェックし、使用可能なものがない場合は、指定された時間タイムアウトを待機します。
よろしく、
Ubuntu のマニュアル ページから:
timeout 引数は、poll() がブロックする時間の上限をミリ秒単位で指定します。timeout に負の値を指定すると、タイムアウトは無限になります。
0 の特別なケースはないので、poll() は 0 ミリ秒間ブロックすると仮定します。