Bug #3259
closedtest_socket.rb has 1 Error on Mac OS X 10.6
Description
=begin
Mac OS X 10.6 (SnowLeopard)上で trunk(r27662) の make test-all すると test_socket.rb が 1 Error になります。
- Error:
test_tcp(TestSocket):
Errno::EINVAL: Invalid argument - connect(2)
/Users/nagachika/opt/ruby-trunk/src/ruby-trunk/.ext/common/socket.rb:37:inconnect' /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:inconnect' /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:inopen' /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.
-
elsif defined?(Socket::AF_UNIX) && afamily == Socket::AF_UNIXaddr = Addrinfo.new(["AF_INET6", addr.ip_port, nil, "::1"], addr.pfamily, addr.socktype, addr.protocol) end
raise SocketError, "unbound Unix socket" if addr.unix_path == ""
=end
Updated by akr (Akira Tanaka) almost 14 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
=begin
This issue was solved with changeset r27663.
Tomoyuki, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
=end