python/cpython · error · RuntimeError
File descriptor {fd!r} is used by transport {transport!r}
Error message
File descriptor {fd!r} is used by transport {transport!r} What it means
Error "File descriptor {fd!r} is used by transport {transport!r}" thrown in python/cpython.
Source
Thrown at Lib/asyncio/selector_events.py:278
'exception': exc,
}
if protocol is not None:
context['protocol'] = protocol
if transport is not None:
context['transport'] = transport
self.call_exception_handler(context)
def _ensure_fd_no_transport(self, fd):
fileno = fd
if not isinstance(fileno, int):
try:
fileno = int(fileno.fileno())
except (AttributeError, TypeError, ValueError):
# This code matches selectors._fileobj_to_fd function.
raise ValueError(f"Invalid file object: {fd!r}") from None
transport = self._transports.get(fileno)
if transport and not transport.is_closing():
raise RuntimeError(
f'File descriptor {fd!r} is used by transport '
f'{transport!r}')
def _add_reader(self, fd, callback, *args, context=None):
self._check_closed()
handle = events.Handle(callback, args, self, context=context)
key = self._selector.get_map().get(fd)
if key is None:
self._selector.register(fd, selectors.EVENT_READ,
(handle, None))
else:
mask, (reader, writer) = key.events, key.data
self._selector.modify(fd, mask | selectors.EVENT_READ,
(handle, writer))
if reader is not None:
reader.cancel()
return handle
View on GitHub (pinned to bc6749cc3b)
Solutions
- Remove the existing reader/writer registration (remove_reader/remove_writer) before reusing the file descriptor.
- Do not share one file descriptor between two transports simultaneously.
When it happens
Trigger: Raised when registering a file descriptor that is already used by another transport.
Common situations: See trigger scenarios.
AI-assisted analysis of python/cpython@bc6749cc3b (2026-08-14).
Data as JSON: /api/errors/40f1f67e22f4de95.
Report an issue: GitHub.