68user's page 掲示板

Prev< No. 1617> Next  [最新発言に戻る] [過去ログ一覧]
No. 1617 # gixs 2001/01/20 (土) 01:15:01
>>1615 mak(spriggan)氏
> 0〜64までをチェックしかselectはチェックしていなかったので
> selectはタイムアウトを返し、実際取得したファイルディスクリプタは
> 64を超えた数になっていたのでFD_ISSETは反応を返した。
> というふうになっていた模様です。

確かになりますね。
知りませんでした。
しかし、fd_setの戻り値をチェックするのは、select(2)が正数を返した時のみにしておいた方が安全でしょう(select(2)に正しい第1引数を渡したとしても、タイムアウト時にfd_setがゼロクリアされるかは分かりません。規格としてゼロクリアが決まっているならO.K.でしょうが、そこまでしてselect(2)の戻り値のチェックを省く理由も見付かりません)。
# 今回はselect(2)の戻り値チェックを省いたおかげで、第1引数のバグに気づいたわけですが。

> ちなみに、ファイルディスクリプタの番号を
> ここからここまでの番号しか取得しない。とか制限かける方法とか
> ないのでしょうか?

select(2)を呼ぶ時に、チェックすべきファイルディスクリプタの部分だけ、fd_setにマスクをかけますが(第1引数は効率の為)。
それとも、効率を気にしていますか?
確かに、非常に大きな番号のファイルディスクリプタ1つだけをチェックするとなると、無駄がありそうなことは否定しません。
それが気になるなら、poll(2)でしょうか。

Prev< No. 1617> Next  [最新発言に戻る] [過去ログ一覧]