diff options
| author | Tomoyuki Sahara <[email protected]> | 2013-08-14 09:34:22 +0900 |
|---|---|---|
| committer | Tomoyuki Sahara <[email protected]> | 2013-08-14 09:34:22 +0900 |
| commit | a9593e1f5774e980fbb24831c9065386a11fbf74 (patch) | |
| tree | b6ac7dc868eff589fff4061040a6eba12877a75b | |
| parent | 76e1017f481b6facb38e7db8af8db61c8afaf751 (diff) | |
| download | mruby-a9593e1f5774e980fbb24831c9065386a11fbf74.tar.gz mruby-a9593e1f5774e980fbb24831c9065386a11fbf74.zip | |
v4/v6 fallback for TCP.
| -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 |
