diff --git a/engine/instances.py b/engine/instances.py index 8e9901f..2aaf466 100644 --- a/engine/instances.py +++ b/engine/instances.py @@ -96,8 +96,17 @@ class Socks5Server: if not self.running: return self.running = False - if self.server: - self.server.close() + if self.server and self.loop: + # 在子线程事件循环中优雅关闭服务器 + import concurrent.futures + async def _shutdown(): + self.server.close() + await self.server.wait_closed() + try: + future = asyncio.run_coroutine_threadsafe(_shutdown(), self.loop) + future.result(timeout=5) # 最多等待5秒 + except (concurrent.futures.TimeoutError, Exception): + pass if self.loop: try: self.loop.call_soon_threadsafe(self.loop.stop)