From 5af21af575968eecb82fc20836b22f14b2e13191 Mon Sep 17 00:00:00 2001 From: Sean Arietta Date: Thu, 25 Dec 2014 22:52:47 -0800 Subject: [PATCH] Small updates that fix a couple of connection issues --- socketIO_client/__init__.py | 11 ++++++++--- socketIO_client/transports.py | 5 +++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/socketIO_client/__init__.py b/socketIO_client/__init__.py index 3793c60..2b45c25 100644 --- a/socketIO_client/__init__.py +++ b/socketIO_client/__init__.py @@ -161,7 +161,6 @@ class SocketIO(object): # This sets of a chain of events that attempts to connect to # the server at the base namespace. self.define(Namespace) - self._transport.connect(""); # Events that fail to emit due to connection errors will be # placed in this 'queue' and re-sent automatically upon @@ -430,6 +429,7 @@ class SocketIO(object): """ websocket = transports.WebsocketTransport(self.session, self.is_secure, self.base_url, **self.kw); websocket.send_packet(PacketType.PING, "", "probe"); + for packet in websocket.recv_packet(): _log.debug("[websocket] Packet: %s" % str(packet)); if packet.type == PacketType.PONG: @@ -486,6 +486,11 @@ class SocketIO(object): transport = transports.XHR_PollingTransport(self.session, self.is_secure, self.base_url, **self.kw); transport.set_timeout(self.session.connection_timeout); + # Wait for the response that we connected. + packet = None; + while packet == None or packet.type != PacketType.MESSAGE or packet.payload.type != MessageType.CONNECT: + packet = transport.recv().next(); + # If websocket is available, upgrade to it immediately. # TODO(sean): We could run this on a separate thread for # maximum efficiency although that would require some @@ -496,7 +501,7 @@ class SocketIO(object): try: transport = self._upgrade(); break; - except: + except Exception, e: pass; time.sleep(1); num_retries += 1; @@ -504,7 +509,7 @@ class SocketIO(object): if num_retries == MAX_UPGRADE_RETRIES: _log.warn("[websocket] Failed to upgrade to websocket"); - # Update namespaces + # Update namespaces for path, namespace in self._namespace_by_path.items(): namespace._transport = transport transport.connect(path) diff --git a/socketIO_client/transports.py b/socketIO_client/transports.py index 96a4045..f62e997 100644 --- a/socketIO_client/transports.py +++ b/socketIO_client/transports.py @@ -133,12 +133,13 @@ class WebsocketTransport(_AbstractTransport): base_url, parser.ENGINEIO_PROTOCOL, socketIO_session.id) try: - _log.debug("[websocket] Connecting"); - self._connection = websocket.create_connection(self._url) + _log.debug("[websocket] Connecting to: %s" % self._url); + self._connection = websocket.create_connection(self._url); except socket.timeout as e: raise ConnectionError(e) except socket.error as e: raise ConnectionError(e) + self._connection.settimeout(TIMEOUT_IN_SECONDS) @property