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 <rep...@bugs.python.org> <http://bugs.python.org/issue13564> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com