STINNER Victor added the comment:

The patch uses the flag MSG_WAITALL for recv() if available. Extract of the 
manual page:

       MSG_WAITALL (since Linux 2.2)
              This flag requests that  the  operation  block  until  the  full
              request  is  satisfied.  However, the call may still return less
              data than requested if a signal is caught, an error  or  discon-
              nect  occurs,  or the next data to be received is of a different
              type than that returned.

It looks interesting, but it doesn't guarantee that you will always get exactly 
the expected size. You still have to call again recv() to get more data if a 
signal was received.


Jean-Paul Calderone wrote:
> Since MSG_WAITALL is already exposed to Python (when the underlying platform 
> provides it), I wonder if this could all be implemented more simply in pure 
> Python.  Can you elaborate on the motivation to use C?

sendall() is implemented in C while it would be possible to implement it in 
Python. The same rationale can be used on a large part of the stdlib :-) (The 
io module is implemented in Python in Python 2.6!)

The C gives you a full control on the GIL, signal handle, and it might be 
faster.


Antoine Pitrou wrote:
> I'm frankly not sure why this is useful.

recvall() allows to easily fix existing code: just replace recv() with 
recvall(), no need to refactor code to call makefile() which has a different 
API (ex: read/recv, write/send).

The addition is small and well defined.

--

About the exception: asyncio.StreamReader.read_exactly() raises an 
IncompleteReadError which contains the read bytes and inherits from EOFError: 
see
https://docs.python.org/dev/library/asyncio-stream.html#asyncio.StreamReader.readexactly
and
https://docs.python.org/dev/library/asyncio-stream.html#asyncio.IncompleteReadError

The following issue discussed the design on this exception in asyncio:
https://code.google.com/p/tulip/issues/detail?id=111

http.client uses an IncompleteRead (which inherits from HTTPException):
https://docs.python.org/dev/library/http.client.html#http.client.IncompleteRead

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue1103213>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to