python/cpython · error · ValueError
the socket must be non-blocking
Error message
the socket must be non-blocking
What it means
Error "the socket must be non-blocking" thrown in python/cpython.
Source
Thrown at Lib/asyncio/base_events.py:952
async def getaddrinfo(self, host, port, *,
family=0, type=0, proto=0, flags=0):
if self._debug:
getaddr_func = self._getaddrinfo_debug
else:
getaddr_func = socket.getaddrinfo
return await self.run_in_executor(
None, getaddr_func, host, port, family, type, proto, flags)
async def getnameinfo(self, sockaddr, flags=0):
return await self.run_in_executor(
None, socket.getnameinfo, sockaddr, flags)
async def sock_sendfile(self, sock, file, offset=0, count=None,
*, fallback=True):
if self._debug and sock.gettimeout() != 0:
raise ValueError("the socket must be non-blocking")
_check_ssl_socket(sock)
self._check_sendfile_params(sock, file, offset, count)
try:
return await self._sock_sendfile_native(sock, file,
offset, count)
except exceptions.SendfileNotAvailableError:
if not fallback:
raise
return await self._sock_sendfile_fallback(sock, file,
offset, count)
async def _sock_sendfile_native(self, sock, file, offset, count):
# NB: sendfile syscall is not supported for SSL sockets and
# non-mmap files even if sendfile is supported by OS
raise exceptions.SendfileNotAvailableError(
f"syscall sendfile is not available for socket {sock!r} "
f"and file {file!r} combination")
View on GitHub (pinned to bc6749cc3b)
Solutions
- Call sock.setblocking(False) before handing the socket to the event loop.
- Or create the socket via loop.create_connection()/create_datagram_endpoint() which set non-blocking mode automatically.
When it happens
Trigger: Raised when a blocking-mode socket is registered with the event loop for async I/O.
Common situations: See trigger scenarios.
AI-assisted analysis of python/cpython@bc6749cc3b (2026-08-14).
Data as JSON: /api/errors/7cfe2378af0a719a.
Report an issue: GitHub.