aboutsummaryrefslogtreecommitdiff
path: root/discord/gateway.py
diff options
context:
space:
mode:
Diffstat (limited to 'discord/gateway.py')
-rw-r--r--discord/gateway.py14
1 files changed, 10 insertions, 4 deletions
diff --git a/discord/gateway.py b/discord/gateway.py
index 3f92ec1f..f262477f 100644
--- a/discord/gateway.py
+++ b/discord/gateway.py
@@ -508,16 +508,21 @@ class DiscordWebSocket:
elif msg.type is aiohttp.WSMsgType.ERROR:
log.debug('Received %s', msg)
raise msg.data
- elif msg.type in (aiohttp.WSMsgType.CLOSED, aiohttp.WSMsgType.CLOSE):
+ elif msg.type in (aiohttp.WSMsgType.CLOSED, aiohttp.WSMsgType.CLOSING, aiohttp.WSMsgType.CLOSE):
log.debug('Received %s', msg)
raise WebSocketClosure
- except WebSocketClosure as e:
+ except WebSocketClosure:
+ # Ensure the keep alive handler is closed
+ if self._keep_alive:
+ self._keep_alive.stop()
+ self._keep_alive = None
+
if self._can_handle_close():
log.info('Websocket closed with %s, attempting a reconnect.', self.socket.close_code)
- raise ReconnectWebSocket(self.shard_id) from e
+ raise ReconnectWebSocket(self.shard_id) from None
elif self.socket.close_code is not None:
log.info('Websocket closed with %s, cannot reconnect.', self.socket.close_code)
- raise ConnectionClosed(self.socket, shard_id=self.shard_id) from e
+ raise ConnectionClosed(self.socket, shard_id=self.shard_id) from None
async def send(self, data):
self._dispatch('socket_raw_send', data)
@@ -598,6 +603,7 @@ class DiscordWebSocket:
async def close(self, code=4000):
if self._keep_alive:
self._keep_alive.stop()
+ self._keep_alive = None
await self.socket.close(code=code)