STINNER Victor added the comment:

socket_eintr.2.patch has an issue with timeout.

socket_eintr.2.patch retries a socket method when it is interrupted, but it 
doesn't recompute the timeout. If a program is interrupted every second by a 
signal, the signal handler doesn't raise an exception and the socket has a 
timeout longer than 1 second, the socket method will "hang".

Internally, socket method uses select() using the socket timeout. I had to 
modify deeply the socket module to handle correctly EINTR and respect the 
timeout in Python 3.5. By the way, I changed the behaviour of socket.sendall(), 
the timeout is now more strict (it's now the maximum total duration, the 
timeout is no reset each time some bytes are sent).

Since Python applications of the last 20 years already had to handle EINTR 
theirself, it's maybe safer to leave Python 2.7 with its bugs and let 
application developers workaround them? Anyway, if you have to handle EINTR in 
your application, you will have to handle EINTR explicitly to support Python 
2.7.9 and older, no? It's hard to require an exact minor version on all 
platforms.

The PEP 475 is wider than just the socket module:
https://docs.python.org/dev/whatsnew/3.5.html#changes-in-the-python-api

Impacted Python modules: io, os, select, socket, time. (Python 2.7 don't have 
faulthandler and don't have signal.sigtimedwait() nor signal.sigwaitinfo() 
functions, so faulthandler and signal are not impacted in Python 2.7.)

Do you want to fix all these modules?

----------

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

Reply via email to