とみたです。 On Thu, 23 Jun 2005 08:26:57 +0900 nobu / ruby-lang.org wrote: > > 私は Solaris で poll() の存在を初めて知ったので、select() はもう古くて > > poll() を使うべきなんだと思ってました。 > > > > poll() がある環境では select() ではなく poll() を使うようにするという > > のがたぶん綺麗な解決方法なんだと思います。 > これはシステムによってまちまちで、たとえばLinuxではselect()にも > FD_SETSIZEの制限がなくて、poll()もselect()で実装していたはずで > す。 ええと、「カーネルレベルでは制限がない」という話でしょうか。 でもライブラリ側で制限があるんであれば、結局普通には使うことができない ということですよね。 select() で FD_SETSIZE 以上のファイル記述子を扱う方法というのが公式に 無い以上、あくまでも select() でやろうとしたら、各OS毎の実装に依存した select() の制限を迂回するような仕組みを Ruby 内に実装しないといけなく なるような気がするんですが、杞憂でしょうか。 それよりは、poll() が用意されてる環境では poll() を使ってしまった方が いいんじゃないかと。 poll() がない環境(というのがどういうのかは私は知らないんですが)では、 そもそも FD_SETSIZE 以上のファイルを作れないように制限しちゃうとかでも いいんじゃないでしょうか。SIGSEGV で落ちるよりはマシだと思います。 ・ poll() がある環境: select() ではなく poll() を使う。 ・ poll() がない環境: open/socket/pipe 等で FD_SETSIZE 以上のファイル記述子が生成された場 合は、Errno::EMFILE 例外にする。 というような感じではどうでしょう? -- とみたまさひろ <tommy / tmtm.org> 3469 42CC 4D32 F53C AD98 65A5 8C37 FF09 69C1 6040