From 7dca8f9ba4e220045848c30d3c56af5bbb752378 Mon Sep 17 00:00:00 2001 From: Joey Payne Date: Wed, 27 Jan 2016 12:26:54 -0700 Subject: [PATCH] Heartbeat was incorrectly set and resulted in disconnects on certain server implementations. --- socketIO_client/__init__.py | 1 + socketIO_client/transports.py | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/socketIO_client/__init__.py b/socketIO_client/__init__.py index fc1bcee..5a06868 100644 --- a/socketIO_client/__init__.py +++ b/socketIO_client/__init__.py @@ -407,6 +407,7 @@ class SocketIO(object): '6': self._on_ack, '7': self._on_error, '8': self._on_noop, + '': self._on_noop }[code] except KeyError: raise PacketError('unexpected code (%s)' % code) diff --git a/socketIO_client/transports.py b/socketIO_client/transports.py index 21e046e..215c838 100644 --- a/socketIO_client/transports.py +++ b/socketIO_client/transports.py @@ -85,6 +85,8 @@ class _AbstractTransport(object): def send_packet(self, code, path='', data='', callback=None): packet_id = self.set_ack_callback(callback) if callback else '' packet_parts = str(code), packet_id, path, encode_unicode(data) + if not data: + packet_parts = packet_parts[:-1] packet_text = ':'.join(packet_parts) self.send(packet_text) self._log(logging.DEBUG, '[packet sent] %s', packet_text) @@ -143,6 +145,8 @@ class _WebsocketTransport(_AbstractTransport): http_session = _prepare_http_session(kw) req = http_session.prepare_request(requests.Request('GET', url)) headers = ['%s: %s' % item for item in req.headers.items()] + headers.append('Connection: keep-alive') + try: self._connection = websocket.create_connection(url, header=headers) except socket.timeout as e: @@ -318,10 +322,10 @@ def _get_response(request, *args, **kw): response = request(*args, **kw) except requests.exceptions.Timeout as e: raise TimeoutError(e) - except requests.exceptions.ConnectionError as e: - raise ConnectionError(e) except requests.exceptions.SSLError as e: raise ConnectionError('could not negotiate SSL (%s)' % e) + except requests.exceptions.ConnectionError as e: + raise ConnectionError(e) status = response.status_code if 200 != status: raise ConnectionError('unexpected status code (%s)' % status)