diff options
author | liris <liris.pp@gmail.com> | 2014-07-08 08:33:18 +0900 |
---|---|---|
committer | liris <liris.pp@gmail.com> | 2014-07-08 08:33:18 +0900 |
commit | 8ac41b7b53a03e1526479a79e59db9aaba45f8ff (patch) | |
tree | d360fee7686561b40e8618f0a11159f0311cc593 | |
parent | a1373eb0d3abc30e1d1815f9425947ce7bcf332a (diff) | |
parent | 90c2f4fb732a9b03a2bbaeb4ec59eea9b9c0dd34 (diff) | |
download | websocket-client-8ac41b7b53a03e1526479a79e59db9aaba45f8ff.tar.gz |
Merge branch 'cjhanks-master'
-rw-r--r-- | websocket/_core.py | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/websocket/_core.py b/websocket/_core.py index 780706e..5948ab3 100644 --- a/websocket/_core.py +++ b/websocket/_core.py @@ -47,6 +47,7 @@ else: from base64 import encodestring as base64encode import os +import errno import struct import uuid import hashlib @@ -418,16 +419,27 @@ class WebSocket(object): if not addrinfo_list: raise WebSocketException("Host not found.: " + hostname + ":" + str(port)) - family = addrinfo_list[0][0] - self.sock = socket.socket(family) - self.sock.settimeout(self.timeout) - for opts in DEFAULT_SOCKET_OPTION: - self.sock.setsockopt(*opts) - for opts in self.sockopt: - self.sock.setsockopt(*opts) - # TODO: we need to support proxy - address = addrinfo_list[0][4] - self.sock.connect(address) + for addrinfo in addrinfo_list: + family = addrinfo[0] + self.sock = socket.socket(family) + self.sock.settimeout(self.timeout) + for opts in DEFAULT_SOCKET_OPTION: + self.sock.setsockopt(*opts) + for opts in self.sockopt: + self.sock.setsockopt(*opts) + # TODO: we need to support proxy + address = addrinfo[4] + try: + self.sock.connect(address) + except socket.error as error: + if error.errno in (errno.ECONNREFUSED, ): + continue + else: + raise + else: + break + else: + raise error if proxy_host: self._tunnel(hostname, port) |