summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliris <liris.pp@gmail.com>2014-04-30 14:19:33 +0900
committerliris <liris.pp@gmail.com>2014-04-30 14:19:33 +0900
commit3f560ca541bc7651acf17992e4b855e6a29bc572 (patch)
tree72d37a265fedafa2891b2a14161076ae233b26c3
parent8fbb15a6ecaaf976b8bfdde42efe841a68f50046 (diff)
downloadwebsocket-client-3f560ca541bc7651acf17992e4b855e6a29bc572.tar.gz
- fixed #77
- I don't have IPv6 enviroment, now. So, I didn't test yet. - fixed some test warning.
-rw-r--r--tests/test_websocket.py3
-rw-r--r--websocket/__init__.py27
2 files changed, 20 insertions, 10 deletions
diff --git a/tests/test_websocket.py b/tests/test_websocket.py
index 3df82c1..b34c79a 100644
--- a/tests/test_websocket.py
+++ b/tests/test_websocket.py
@@ -459,10 +459,9 @@ class SockOptTest(unittest.TestCase):
@unittest.skipUnless(TEST_WITH_INTERNET, "Internet-requiring tests are disabled")
def testSockOpt(self):
sockopt = ((socket.IPPROTO_TCP, socket.TCP_NODELAY, 1),)
- s = ws.WebSocket(sockopt=sockopt)
- self.assertNotEqual(s.sock.getsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY), 0)
s = ws.create_connection("ws://echo.websocket.org", sockopt=sockopt)
self.assertNotEqual(s.sock.getsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY), 0)
+ s.close()
if __name__ == "__main__":
diff --git a/websocket/__init__.py b/websocket/__init__.py
index 9747b2b..24af2e1 100644
--- a/websocket/__init__.py
+++ b/websocket/__init__.py
@@ -418,11 +418,9 @@ class WebSocket(object):
if sslopt is None:
sslopt = {}
self.connected = False
- self.sock = socket.socket()
- for opts in DEFAULT_SOCKET_OPTION:
- self.sock.setsockopt(*opts)
- for opts in sockopt:
- self.sock.setsockopt(*opts)
+ self.sock = None
+ self._timeout = None
+ self.sockopt = sockopt
self.sslopt = sslopt
self.get_mask_key = get_mask_key
self.fire_cont_frame = fire_cont_frame
@@ -454,7 +452,7 @@ class WebSocket(object):
"""
Get the websocket timeout(second).
"""
- return self.sock.gettimeout()
+ return self._timeout
def settimeout(self, timeout):
"""
@@ -462,7 +460,7 @@ class WebSocket(object):
timeout: timeout time(second).
"""
- self.sock.settimeout(timeout)
+ self._timeout = timeout
timeout = property(gettimeout, settimeout)
@@ -487,8 +485,21 @@ class WebSocket(object):
"""
hostname, port, resource, is_secure = _parse_url(url)
+ addrinfo_list = socket.getaddrinfo(hostname, 80, 0, 0, socket.SOL_TCP)
+ 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
- self.sock.connect((hostname, port))
+ address = addrinfo_list[0][4]
+ self.sock.connect(address)
+
if is_secure:
if HAVE_SSL:
sslopt = dict(cert_reqs=ssl.CERT_REQUIRED,