Message 184882 - Python tracker
> After digging a bit further it seems EAGAIN occurs in case a timeout was previously > set against the socket as in ftplib.FTP(..., timeout=2) (at least on Linux, FWICT). Ah, indeed. That's because socket timeout makes the underlying fd non-blocking. Which means there probably should be a higher-level sendfile() facility for sockets, taking into account the socket timeout...