From: Tomoyuki Chikanaga Date: 2010-05-08T09:47:58+09:00 Subject: [ruby-dev:41215] [Bug #3259] test_socket.rb has 1 Error on Mac OS X 10.6 Bug #3259: test_socket.rb has 1 Error on Mac OS X 10.6 http://redmine.ruby-lang.org/issues/show/3259 起票者: Tomoyuki Chikanaga ステータス: Open, 優先度: Normal カテゴリ: ext ruby -v: ruby 1.9.3dev (2010-05-08 trunk 27661) [x86_64-darwin10.3.0] Mac OS X 10.6 (SnowLeopard)上で trunk(r27662) の make test-all すると test_socket.rb が 1 Error になります。 2) Error: test_tcp(TestSocket): Errno::EINVAL: Invalid argument - connect(2) /Users/nagachika/opt/ruby-trunk/src/ruby-trunk/.ext/common/socket.rb:37:in `connect' /Users/nagachika/opt/ruby-trunk/src/ruby-trunk/.ext/common/socket.rb:37:in `connect_internal' /Users/nagachika/opt/ruby-trunk/src/ruby-trunk/.ext/common/socket.rb:86:in `connect' /Users/nagachika/opt/ruby-trunk/src/ruby-trunk/test/socket/test_socket.rb:82:in `block in test_tcp' /Users/nagachika/opt/ruby-trunk/src/ruby-trunk/test/socket/test_socket.rb:80:in `open' /Users/nagachika/opt/ruby-trunk/src/ruby-trunk/test/socket/test_socket.rb:80:in `test_tcp' ext/socket/lib/socket.rb の AddrInfo#connect_address で MacOS X 10.4 が返す IPv6 のアドレス表現が特殊(0.0.0.0)なので対処がされているようなのですが、10.6 ではまた少し違った表現(::ffff:0.0.0.0)を返すようになっているようです。Mac OS X 10.5 (Leopard)の環境は手元にないため未確認です。 以下の変更を加えて make test-all でこの Error がなくなること、他に Error が増えないことを確認しました。 Index: ext/socket/lib/socket.rb =================================================================== --- ext/socket/lib/socket.rb (revision 27662) +++ ext/socket/lib/socket.rb (working copy) @@ -192,6 +192,8 @@ addr = Addrinfo.new(["AF_INET6", addr.ip_port, nil, "::1"], addr.pfamily, addr.socktype, addr.protocol) elsif addr.ip_address == "0.0.0.0" # MacOS X 10.4 returns "a.b.c.d" for IPv4-mapped IPv6 address. addr = Addrinfo.new(["AF_INET6", addr.ip_port, nil, "::1"], addr.pfamily, addr.socktype, addr.protocol) + elsif addr.ip_address == "::ffff:0.0.0.0" # MacOS X 10.6 returns "::ffff:a.b.c.d" for IPv4-mapped IPv6 address. + addr = Addrinfo.new(["AF_INET6", addr.ip_port, nil, "::1"], addr.pfamily, addr.socktype, addr.protocol) end elsif defined?(Socket::AF_UNIX) && afamily == Socket::AF_UNIX raise SocketError, "unbound Unix socket" if addr.unix_path == "" ---------------------------------------- http://redmine.ruby-lang.org