diff options
| -rw-r--r-- | mrblib/socket.rb | 19 |
1 files 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? "#<Addrinfo: #{inspect_sockaddr} #{proto}>" else "#<Addrinfo: #{self.unix_path} SOCK_STREAM>" @@ -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 |
