diff --git a/backend.py b/backend.py index 39c15d2..e985360 100644 --- a/backend.py +++ b/backend.py @@ -151,5 +151,16 @@ def _get_current_voice_channel(self): self.setup_client() self.discord_client.get_selected_voice_channel() + def close(self): + """Cleanup method called when backend is shutting down""" + log.debug("Closing Discord backend connection") + if self.discord_client: + try: + self.discord_client.disconnect() + except Exception as ex: + log.error(f"Error disconnecting Discord client: {ex}") + self.discord_client = None + self._is_authed = False + backend = Backend() diff --git a/discordrpc/sockets.py b/discordrpc/sockets.py index e9b591c..a0f786b 100644 --- a/discordrpc/sockets.py +++ b/discordrpc/sockets.py @@ -42,8 +42,15 @@ def connect(self): def disconnect(self): if self.socket is None: return - self.socket.shutdown(socket.SHUT_RDWR) - self.socket.close() + try: + self.socket.shutdown(socket.SHUT_RDWR) + except Exception: + pass # Socket might already be disconnected + try: + self.socket.close() + except Exception: + pass + self.socket = None # Reset so connect() creates a fresh socket def send(self, payload, op): payload = json.dumps(payload).encode('UTF-8')