From: info@... Date: 2006-06-25T01:23:16+09:00 Subject: [ruby-dev:28833] Re: udp test with ruby 1.8.5 preview1 on cygwin Cygwin @ WindowsXP SP2 です。 bind するアドレスを 127.0.0.1 にすると cygwin でも戻ってきますが、結果が 違いますね。 $ uname -a CYGWIN_NT-5.1 YUMI 1.5.19(0.150/4/2) 2006-01-20 13:28 i686 Cygwin $ /usr/local/ruby-1.8.5-preview1/bin/ruby -rsocket -ve ' u1 = UDPSocket.new u2 = UDPSocket.new u1.bind("", 0) u2.send("", 0, u1.getsockname) p u1.recv(10) ' ruby 1.8.5 (2006-06-22) [i386-cygwin] -e:6:in `recv': Interrupt from -e:6 $ /usr/local/ruby-1.8.5-preview1/bin/ruby -rsocket -ve ' u1 = UDPSocket.new u2 = UDPSocket.new u1.bind("127.0.0.1", 0) u2.send("127.0.0.1", 0, u1.getsockname) p u1.recv(10) ' ruby 1.8.5 (2006-06-22) [i386-cygwin] "127.0.0.1" ちなみに u1.bind("", 0) 時に netstat では UDP の待ち受けは増えているよう です。 $ netstat -na|grep UDP UDP 0.0.0.0:445 *:* UDP 127.0.0.1:3177 *:* UDP 219.104.42.196:137 *:* UDP 219.104.42.196:138 *:* $ netstat -na|grep UDP UDP 0.0.0.0:445 *:* UDP 0.0.0.0:3239 *:* UDP 127.0.0.1:3177 *:* UDP 219.104.42.196:137 *:* UDP 219.104.42.196:138 *:* 以上です。 > mswin32 版ではどうなるのだろうと思って > ActiveScriptRuby 1.8.4.2 で試してみたところ、 > > H:\>type a.rb > require 'socket' > u1 = UDPSocket.new > u2 = UDPSocket.new > u1.bind("", 0) > u2.send("", 0, u1.getsockname) > p u1.recv(10) > > H:\>ruby -v a.rb > ruby 1.8.4 (2005-12-24) [i386-mswin32] > a.rb:5:in `send': 要求したアドレスのコンテキストが無効です。 - send(2) (Errno::E > ADDRNOTAVAIL) > from a.rb:5 > > となりました。 > > u1.bind("", 0) を u1.bind("127.0.0.1", 0) に変えたところ、 > > H:\>ruby -v a.rb > ruby 1.8.4 (2005-12-24) [i386-mswin32] > "" > > となりました。 > > というわけで、recv から戻ってこないというのは > どうやら cygwin 版にのみ存在する問題のようです。 >