{"record":{"id":"4e6f5dd6c1c3b5bf","repo":"python/cpython","slug":"server-self-r-is-already-being-awaited-on-serve","errorCode":null,"errorMessage":"server {self!r} is already being awaited on serve_forever()","messagePattern":"server (.+?) is already being awaited on serve_forever\\(\\)","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"Lib/asyncio/base_events.py","lineNumber":374,"sourceCode":"            self._wakeup()\n\n    def close_clients(self):\n        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","sourceCodeStart":356,"sourceCodeEnd":392,"githubUrl":"https://github.com/python/cpython/blob/bc6749cc3b5ae4a5e88a6cc2d5b3bebbe354eae6/Lib/asyncio/base_events.py#L356-L392","documentation":"Error \"server {self!r} is already being awaited on serve_forever()\" thrown in python/cpython.","triggerScenarios":"Raised when Server.serve_forever() is called on a server that is already serving.","commonSituations":"See trigger scenarios.","solutions":["Call serve_forever() only once per Server instance; guard with a flag or store the returned task and await it instead.","If you only need the server to run, use 'async with server:' or serve_forever() once and cancel it during shutdown."],"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"}