diff options
author | liris <liris.pp@gmail.com> | 2014-04-30 14:19:33 +0900 |
---|---|---|
committer | liris <liris.pp@gmail.com> | 2014-04-30 14:19:33 +0900 |
commit | 3f560ca541bc7651acf17992e4b855e6a29bc572 (patch) | |
tree | 72d37a265fedafa2891b2a14161076ae233b26c3 | |
parent | 8fbb15a6ecaaf976b8bfdde42efe841a68f50046 (diff) | |
download | websocket-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.py | 3 | ||||
-rw-r--r-- | websocket/__init__.py | 27 |
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, |