From a9593e1f5774e980fbb24831c9065386a11fbf74 Mon Sep 17 00:00:00 2001 From: Tomoyuki Sahara Date: Wed, 14 Aug 2013 09:34:22 +0900 Subject: v4/v6 fallback for TCP. --- mrblib/socket.rb | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/mrblib/socket.rb b/mrblib/socket.rb index 4762c00af..58d097e5c 100644 --- a/mrblib/socket.rb +++ b/mrblib/socket.rb @@ -70,7 +70,6 @@ class Addrinfo else proto = '???' end - # how can we get the last part? "#" else "#" @@ -228,11 +227,19 @@ class TCPSocket if self.is_a? TCPServer super(host, service) else - ai = Addrinfo.getaddrinfo(host, service)[0] - super(Socket._socket(ai.afamily, Socket::SOCK_STREAM, 0), "r+") - # XXX: bind(2) - Socket._connect(self.fileno, ai.to_sockaddr) - self + s = nil + e = SocketError + Addrinfo.foreach(host, service) { |ai| + begin + s = Socket._socket(ai.afamily, Socket::SOCK_STREAM, 0) + Socket._connect(s, ai.to_sockaddr) + super(s, "r+") + return + rescue => e0 + e = e0 + end + } + raise e end end -- cgit v1.2.3