summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliris <liris.pp@gmail.com>2014-07-08 08:33:18 +0900
committerliris <liris.pp@gmail.com>2014-07-08 08:33:18 +0900
commit8ac41b7b53a03e1526479a79e59db9aaba45f8ff (patch)
treed360fee7686561b40e8618f0a11159f0311cc593
parenta1373eb0d3abc30e1d1815f9425947ce7bcf332a (diff)
parent90c2f4fb732a9b03a2bbaeb4ec59eea9b9c0dd34 (diff)
downloadwebsocket-client-8ac41b7b53a03e1526479a79e59db9aaba45f8ff.tar.gz
Merge branch 'cjhanks-master'
-rw-r--r--websocket/_core.py32
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)