{"record":{"id":"712a9a825eb7fc5f","repo":"python/cpython","slug":"server-self-r-is-closed","errorCode":null,"errorMessage":"server {self!r} is closed","messagePattern":"server (.+?) is closed","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"Lib/asyncio/base_events.py","lineNumber":377,"sourceCode":"        for transport in self._clients.copy():\n            transport.close()\n\n    def abort_clients(self):\n        for transport in self._clients.copy():\n            transport.abort()\n\n    async def start_serving(self):\n        self._start_serving()\n        # Skip one loop iteration so that all 'loop.add_reader'\n        # go through.\n        await tasks.sleep(0)\n\n    async def serve_forever(self):\n        if self._serving_forever_fut is not None:\n            raise RuntimeError(\n                f'server {self!r} is already being awaited on serve_forever()')\n        if self._sockets is None:\n            raise RuntimeError(f'server {self!r} is closed')\n\n        self._start_serving()\n        self._serving_forever_fut = self._loop.create_future()\n\n        try:\n            await self._serving_forever_fut\n        except exceptions.CancelledError:\n            try:\n                self.close()\n                self.close_clients()\n                await self.wait_closed()\n            finally:\n                raise\n        finally:\n            self._serving_forever_fut = None\n\n    async def wait_closed(self):\n        \"\"\"Wait until server is closed and all connections are dropped.","sourceCodeStart":359,"sourceCodeEnd":395,"githubUrl":"https://github.com/python/cpython/blob/bc6749cc3b5ae4a5e88a6cc2d5b3bebbe354eae6/Lib/asyncio/base_events.py#L359-L395","documentation":"Error \"server {self!r} is closed\" thrown in python/cpython.","triggerScenarios":"Raised when an operation is attempted on a server that has been closed.","commonSituations":"See trigger scenarios.","solutions":["Do not await serve_forever() after calling server.close() and server.wait_closed(); check server.is_serving() before use.","Recreate the Server via loop.create_server() if you need to serve again after closing."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"bc6749cc3b5ae4a5e88a6cc2d5b3bebbe354eae6","analyzedAt":"2026-08-14T22:01:13.976Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}