Project

General

Profile

Actions

Bug #3259

closed

test_socket.rb has 1 Error on Mac OS X 10.6

Added by nagachika (Tomoyuki Chikanaga) almost 14 years ago. Updated almost 13 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 1.9.3dev (2010-05-08 trunk 27661) [x86_64-darwin10.3.0]
Backport:
[ruby-dev:41215]

Description

=begin
Mac OS X 10.6 (SnowLeopard)上で trunk(r27662) の make test-all すると test_socket.rb が 1 Error になります。

  1. 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 == ""
    =end
Actions #1

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

Actions

Also available in: Atom PDF

Like0
Like0