From: Takahiro Kambe Date: 2005-06-23T15:35:01+09:00 Subject: [ruby-dev:26370] Re: IO.select dumps core 参考情報となりますが、 In message <20050623125927.33401bc8.tommy@tmtm.org> on Thu, 23 Jun 2005 12:59:31 +0900, とみたまさひろ wrote: > > これはシステムによってまちまちで、たとえばLinuxではselect()にも > > FD_SETSIZEの制限がなくて、poll()もselect()で実装していたはずで > > す。 > > ええと、「カーネルレベルでは制限がない」という話でしょうか。 NetBSDでも、カーネル自体にはselect(2)で扱えるファイル記述子の数に制限 はありません。(1プロセス毎の制限とかが効いています。) > でもライブラリ側で制限があるんであれば、結局普通には使うことができない > ということですよね。 デフォルトのFD_SETSIZEで作成されたライブラリを使用する場合には、間違い なく制約となります。(わかっているところで、ONC RPC関係。) > select() で FD_SETSIZE 以上のファイル記述子を扱う方法というのが公式に > 無い以上、あくまでも select() でやろうとしたら、各OS毎の実装に依存した > select() の制限を迂回するような仕組みを Ruby 内に実装しないといけなく > なるような気がするんですが、杞憂でしょうか。 ここが問題ですね。NetBSDでは「をインクルードする前に、 FD_SETSIZEを必要な大きいサイズにすべし」となっています。 > ・ poll() がある環境: > select() ではなく poll() を使う。 それで良いと思います。 > ・ poll() がない環境: > open/socket/pipe 等で FD_SETSIZE 以上のファイル記述子が生成された場 > 合は、Errno::EMFILE 例外にする。 FD_SETSIZEの他に、Rubyのコンパイル時に指定された値があれば、それに従う というのもありかもしれません。 -- 神戸 隆博(かんべ たかひろ) at 仕事場