[issue13564] ftplib and sendfile()

Charles-François Natali report at bugs.python.org
Thu Mar 7 17:38:57 CET 2013


Charles-François Natali added the comment:

> Then why 'offset' and 'count' parameters have a different data type?

Because offsets can be negative (e.g. for lseek), while a size can't.
That's why 'count' is size_t, not ssize_t.

>> Furthermore, since sendfile actually supports only regular file and regular
>> files don't support non-blocking I/O, it's unlikely to ever happen.
>
> EAGAIN is caused by the socket fd not being ready yet, not the file fd.
> Please try the patch before making such assumptions.

I didn't see the socket could be set to non-blocking.

In that case, there's a problem with the patch, since select can block
arbitrarily long because it doesn't take the socket timeout into
account.

Also, apparently socket.sendall() doesn't retry on EAGAIN, it doesn't
use BEGIN_SELECT_LOOP.
The risk of false positive (EAGAIN after select reported ready)
shouldn't be as bad as for sendto(), since usually you'll just get a
partial write for a stream oriented socket, but this could be bad for
e.g. a SCTP socket (since it's message-oriented).

>  We're going OT here.

I'm leaving this topic, you can do as you like...

----------

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue13564>
_______________________________________


More information about the Python-bugs-list mailing list