0

のマニュアルページにはselect(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)、次のように書かれています。

If timeout is a null pointer, the select blocks indefinitely.

無期限とは、任意の長さの期間を意味しますか?

select()ソケットがデータを取得するまでスレッドをブロックするのは良いことですか? もしそうなら、*タイムアウトはどうあるべきですか?

4

2 に答える 2

3

「無期限」は恣意的ではなく、永遠です。timeoutポインタがNULLの場合、select永久にブロックするか、セットの 1 つのファイル記述子の 1 つが「準備完了」になるまでブロックします。

于 2013-04-25T14:06:53.850 に答える
0

いいえ、「永遠に」待つのは得策ではありません... ネットワーク ケーブルを抜くと、アプリケーションがフリーズします。データが届かない場合に安全に終了できるように、適切なタイムアウト (おそらく数秒) を設定する必要があります。

于 2013-04-25T14:15:00.103 に答える