STINNER Victor added the comment:
2014-07-24 0:21 GMT+02:00 Charles-François Natali <[email protected]>:
>> You should copy the code from asyncio.windows_utils.socketpair(). It checks
>> also type and proto parameter: raise a ValueError for unsupported values
>> (only SOCK_STREAM and proto=0 are supported). It also supports IPv6. It
>> handles BlockingIOError and InterruptedError on connect (I never understood
>> why these exceptions are simply ignored).
>
> I could use it then, although all those checks are unnecessary since
> the underlying socket() call will check it for us.
socket.socket() supports SOCK_DGRAM on Windows, but asyncio
socketpair() function does not. The check on the socket family is just
to raise a better error message than an error on connect() or
something else.
I don't remember why I added a specific check on the proto parameter.
We might support more protocols in the future, but I'm not sure that
it's interesting to support them (right now). I guess that most
people will call socketpair() without any parameter.
>> You patch checks the address received by accept() and retry. It's a little
>> bit surprising. If you get an unexpected connection, maybe an exception
>> should be raised, instead of just ignoring it. Maybe we should modify the
>> code in asyncio to check also the address?
>
> Why?
> If you have an unexpected connection, it should be dropped, and we
> should wait until the client we're expecting connects, there's no
> reason to raise an error.
> But I'll just reuse asyncio's version.
Your version is safer. You should reuse your while dropping unknown connections.
By the way, we should reuse socket.socketpair() in
asyncio.windows_utils. The Tulip is written for Python 3.3 and shares
exactly the same code base, so you should write
Something like:
if hasattr(socket, 'socketpair'):
socketpair = socket.socketpair
else:
def socketpair(...): ...
Please also fix socketpair() in asyncio to add the while/drop unknown
connection (well, the function in socket.py and windows_utils.py must
be the same).
> Well, that's what I suggested initially, but never got any reply, so I
> went for the least intrusive. I personally think too it should belong
> to socket module.
On Windows, asyncio uses a socket pair in its default event loop
(SelectorEventLoop) for its "self pipe", because select.select() only
supports sockets. The Windows ProactorEventLoop also uses a socket
pair for its "self pipe".
Oh, and you forgot to modify the documentation to update
"Availability". Please add a ".. versionchanged:: 3.5" mentionning
that the function is now also available on Windows.
----------
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue18643>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com