From: Tanaka Akira Date: 2006-09-03T02:05:27+09:00 Subject: [ruby-dev:29417] EINVAL in "drb/unix.rb:91:in `path'" あと、 In article <87veo6uujp.fsf@fsij.org>, Tanaka Akira writes: > 1) Failure: > test_03(TestDRbUNIXCore) [/var/tmp/rka/gcc-32-nopth-18/ruby/test/drb/drbtest.rb:143]: > exception expected but was > Class: > Message: <"Invalid argument"> > ---Backtrace--- > /var/tmp/rka/gcc-32-nopth-18/lib/ruby/1.8/drb/unix.rb:91:in `path' > /var/tmp/rka/gcc-32-nopth-18/lib/ruby/1.8/drb/unix.rb:91:in `close' > /var/tmp/rka/gcc-32-nopth-18/lib/ruby/1.8/drb/drb.rb:1199:in `close' > /var/tmp/rka/gcc-32-nopth-18/lib/ruby/1.8/drb/drb.rb:1181:in `open' > /var/tmp/rka/gcc-32-nopth-18/lib/ruby/1.8/drb/drb.rb:1085:in `method_missing' > /var/tmp/rka/gcc-32-nopth-18/lib/ruby/1.8/drb/drb.rb:1103:in `with_friend' > /var/tmp/rka/gcc-32-nopth-18/lib/ruby/1.8/drb/drb.rb:1084:in `method_missing' > /var/tmp/rka/gcc-32-nopth-18/ruby/test/drb/drbtest.rb:144:in `test_03' > /var/tmp/rka/gcc-32-nopth-18/ruby/test/drb/drbtest.rb:143:in `test_03' > --------------- の失敗ですが、これは unix.rb:91 のあたりを begin path = @socket.path rescue Errno::EINVAL p @socket raise end と変えると Loaded suite test_drbunix.rb Started ...........# F..# F# F# E.# E.# E となり、(bind していない、クライアント側の) UNIXSocket の path を得られない、という話のようです。 UNIX domain socket の path を得られるかどうか、というのは (残念ながら) 単純な話ではないので、可能なら避けるほうがいい と思います。 直後に File.unlink(path) if @server_mode という行があるところを見ると、path を得るのをサーバ側だけ に限定するのは簡単なように思うのですがどうでしょう? たとえば path = @socket.path if @server_mode とするとか。 -- [田中 哲][たなか あきら][Tanaka Akira]