summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-05 00:09:39 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-05 00:09:39 +0000
commit900ef642ddc541dd702d5130297cd68ec157d34c (patch)
treec9253e84ba07010f0da6268ff8e246bc07148af5 /test
parent768e526ce9411c235d24221cbd989f9e4671111a (diff)
downloadruby-900ef642ddc541dd702d5130297cd68ec157d34c.tar.gz
ruby-900ef642ddc541dd702d5130297cd68ec157d34c.tar.xz
ruby-900ef642ddc541dd702d5130297cd68ec157d34c.zip
don't connect to unspecified address (0.0.0.0). OpenBSD reject it.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@22064 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rw-r--r--test/socket/test_addrinfo.rb21
1 files changed, 20 insertions, 1 deletions
diff --git a/test/socket/test_addrinfo.rb b/test/socket/test_addrinfo.rb
index d75ce3b7a..d74e14504 100644
--- a/test/socket/test_addrinfo.rb
+++ b/test/socket/test_addrinfo.rb
@@ -8,6 +8,18 @@ require "test/unit"
class TestSocketAddrInfo < Test::Unit::TestCase
HAS_UNIXSOCKET = defined?(UNIXSocket) && /cygwin/ !~ RUBY_PLATFORM
+ def tcp_unspecified_to_loopback(addrinfo)
+ if addrinfo.ipv4? && addrinfo.ip_address == "0.0.0.0"
+ AddrInfo.tcp("127.0.0.1", addrinfo.ip_port)
+ elsif addrinfo.ipv6? && addrinfo.ipv6_unspecified?
+ AddrInfo.tcp("::1", addrinfo.ip_port)
+ elsif addrinfo.ipv6? && (ai = addrinfo.ipv6_to_ipv4) && ai.ip_address == "0.0.0.0"
+ AddrInfo.tcp("127.0.0.1", addrinfo.ip_port)
+ else
+ addrinfo
+ end
+ end
+
def test_addrinfo_ip
ai = AddrInfo.ip("127.0.0.1")
assert_equal([0, "127.0.0.1"], Socket.unpack_sockaddr_in(ai))
@@ -319,6 +331,7 @@ class TestSocketAddrInfo < Test::Unit::TestCase
def test_connect_from
TCPServer.open("0.0.0.0", 0) {|serv|
serv_ai = AddrInfo.new(serv.getsockname, :INET, :STREAM)
+ serv_ai = tcp_unspecified_to_loopback(serv_ai)
port = random_port
begin
serv_ai.connect_from("0.0.0.0", port) {|s1|
@@ -338,6 +351,7 @@ class TestSocketAddrInfo < Test::Unit::TestCase
def test_connect_to
TCPServer.open("0.0.0.0", 0) {|serv|
serv_ai = AddrInfo.new(serv.getsockname, :INET, :STREAM)
+ serv_ai = tcp_unspecified_to_loopback(serv_ai)
port = random_port
client_ai = AddrInfo.tcp("0.0.0.0", port)
begin
@@ -358,6 +372,7 @@ class TestSocketAddrInfo < Test::Unit::TestCase
def test_connect
TCPServer.open("0.0.0.0", 0) {|serv|
serv_ai = AddrInfo.new(serv.getsockname, :INET, :STREAM)
+ serv_ai = tcp_unspecified_to_loopback(serv_ai)
begin
serv_ai.connect {|s1|
s2 = serv.accept
@@ -392,7 +407,11 @@ class TestSocketAddrInfo < Test::Unit::TestCase
begin
client_ai.listen {|serv|
assert_equal(port, serv.local_address.ip_port)
- TCPSocket.open(*serv.local_address.ip_unpack) {|s1|
+ serv_addr, serv_port = serv.local_address.ip_unpack
+ case serv_addr
+ when "0.0.0.0" then serv_addr = "127.0.0.1"
+ end
+ TCPSocket.open(serv_addr, serv_port) {|s1|
s2, addr = serv.accept
begin
assert_equal(s1.local_address.ip_unpack, addr.ip_unpack)