わたなべです。

Masatoshi SEKI <m_seki / mva.biglobe.ne.jp> writes:

:Windows NTのプロセスのモデルをよくしらないのですが、
:UNIXであるとfork/execとdrb-1.3.2の組合せで問題が起きることが
:わかっています。(子プロセスへソケットが渡ることが起因‥)

Linuxでも同じでした。

% ruby -v server.rb
ruby 1.6.5 (2001-09-19) [i386-linux]
druby://localhost:4000
[return] to exit
/usr/local/lib/ruby/1.6/open3.rb:22: stream closed (IOError)
#<EOFError: End of file reached>
/usr/local/lib/ruby/site_ruby/1.6/drb/drb.rb:109:in `sysread'
/usr/local/lib/ruby/site_ruby/1.6/drb/drb.rb:109:in `load'
/usr/local/lib/ruby/site_ruby/1.6/drb/drb.rb:135:in `recv_request'
/usr/local/lib/ruby/site_ruby/1.6/drb/drb.rb:434:in `proc'
/usr/local/lib/ruby/site_ruby/1.6/drb/drb.rb:475:in `loop'
/usr/local/lib/ruby/site_ruby/1.6/drb/drb.rb:475:in `proc'
/usr/local/lib/ruby/site_ruby/1.6/drb/drb.rb:426:in `start'
/usr/local/lib/ruby/site_ruby/1.6/drb/drb.rb:426:in `proc'
/usr/local/lib/ruby/site_ruby/1.6/drb/drb.rb:400:in `run'
/usr/local/lib/ruby/site_ruby/1.6/drb/drb.rb:397:in `start'
/usr/local/lib/ruby/site_ruby/1.6/drb/drb.rb:397:in `run'
/usr/local/lib/ruby/site_ruby/1.6/drb/drb.rb:359:in `initialize'
/usr/local/lib/ruby/site_ruby/1.6/drb/drb.rb:484:in `new'
/usr/local/lib/ruby/site_ruby/1.6/drb/drb.rb:484:in `start_service'
server.rb:11

:次のバージョン(drb-1.3.3)からはdRubyの作ったソケットを
:  soc.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
:する予定です。
:# あれ? 1.3.3b の最新版に入ってない‥。入れておこう。

CVSのlib/drbを使ったんですが、まだ入ってませんか?

:ところでWinなどの非UNIXな環境でも CLOEXEC という定数は
:使えるのでしょうか?

Cygwinにならあります。
他は使えないと思ったほうがいいでしょう。

-- 
わたなべひろふみ