python/cpython · error · RuntimeError
server {self!r} is closed
Error message
server {self!r} is closed What it means
Error "server {self!r} is closed" thrown in python/cpython.
Source
Thrown at Lib/asyncio/base_events.py:377
for transport in self._clients.copy():
transport.close()
def abort_clients(self):
for transport in self._clients.copy():
transport.abort()
async def start_serving(self):
self._start_serving()
# Skip one loop iteration so that all 'loop.add_reader'
# go through.
await tasks.sleep(0)
async def serve_forever(self):
if self._serving_forever_fut is not None:
raise RuntimeError(
f'server {self!r} is already being awaited on serve_forever()')
if self._sockets is None:
raise RuntimeError(f'server {self!r} is closed')
self._start_serving()
self._serving_forever_fut = self._loop.create_future()
try:
await self._serving_forever_fut
except exceptions.CancelledError:
try:
self.close()
self.close_clients()
await self.wait_closed()
finally:
raise
finally:
self._serving_forever_fut = None
async def wait_closed(self):
"""Wait until server is closed and all connections are dropped.View on GitHub (pinned to bc6749cc3b)
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.
When it happens
Trigger: Raised when an operation is attempted on a server that has been closed.
Common situations: See trigger scenarios.
AI-assisted analysis of python/cpython@bc6749cc3b (2026-08-14).
Data as JSON: /api/errors/712a9a825eb7fc5f.
Report an issue: GitHub.