diff --git a/utils/bf1/bf_utils.py b/utils/bf1/bf_utils.py index 7c83cbd4..8a21fd96 100644 --- a/utils/bf1/bf_utils.py +++ b/utils/bf1/bf_utils.py @@ -1470,7 +1470,10 @@ async def get_player_list( try: response = await blaze_socket.send(packet) except TimeoutError: - await blaze_socket.close() + try: + await blaze_socket.close() + except Exception as e: + logger.error(f"关闭连接时出错: {e}") logger.error("Blaze后端超时!") return "Blaze后端超时!" if origin: diff --git a/utils/bf1/blaze/BlazeClient.py b/utils/bf1/blaze/BlazeClient.py index a830e53f..ed26e5a1 100644 --- a/utils/bf1/blaze/BlazeClient.py +++ b/utils/bf1/blaze/BlazeClient.py @@ -1,6 +1,6 @@ import random -from utils.bf1.blaze.BlazeSocket import BlazeSocket, BlazeServerREQ +from utils.bf1.blaze.BlazeSocket import BlazeServerREQ, BlazeSocket class BlazeClient: @@ -38,7 +38,12 @@ async def get_socket_for_pid(self, pid=None) -> BlazeSocket | None: client = self.clients_by_pid[pid] if client.connect: return client - await client.close() + try: + await client.close() + except Exception as e: + from loguru import logger + + logger.error(f"关闭客户端连接时出错: {e}") del self.clients_by_pid[pid] new_client = BlazeClient() @@ -51,14 +56,24 @@ async def get_socket_for_pid(self, pid=None) -> BlazeSocket | None: return None async def close_all(self): + from loguru import logger + for client in self.clients_by_pid.values(): - await client.close() + try: + await client.close() + except Exception as e: + logger.error(f"关闭客户端连接时出错: {e}") self.clients_by_pid.clear() async def remove_client(self, pid: str): if pid in self.clients_by_pid: client = self.clients_by_pid[pid] - await client.close() + try: + await client.close() + except Exception as e: + from loguru import logger + + logger.error(f"关闭客户端连接时出错: {e}") del self.clients_by_pid[pid] diff --git a/utils/bf1/blaze/BlazeSocket.py b/utils/bf1/blaze/BlazeSocket.py index 044d91ec..90a8197f 100644 --- a/utils/bf1/blaze/BlazeSocket.py +++ b/utils/bf1/blaze/BlazeSocket.py @@ -109,8 +109,15 @@ async def connect_to_server(self): async def close(self): # 关闭连接 self.connect = False - self.writer.close() - await self.writer.wait_closed() + if self.writer: + self.writer.close() + try: + await self.writer.wait_closed() + except ssl.SSLError as e: + # 处理SSL错误:APPLICATION_DATA_AFTER_CLOSE_NOTIFY + logger.warning(f"SSL关闭连接时出现错误 (可忽略): {e}") + except Exception as e: + logger.error(f"关闭连接时出现错误: {e}") logger.success(f"已断开与Blaze服务器 {self.host}:{self.port} 的连接") async def keepalive(self):