On Mon, 01 Sep 2014 08:30:27 +0300, Marko Rauhamaa email@example.com wrote:
"R. David Murray" firstname.lastname@example.org:
PS: I recently switched from using selectors to using a timeout on a socket because in that particular application I could, and because reading a socket with a timeout handles EINTR (in recent python versions), whereas reading a non-blocking socket doesn't. Under the hood, a socket with a timeout is a non-blocking socket.
Under what circumstances would a nonblocking socket generate an EINTR?
Windows. Enough said?
The exact error message was:
BlockingIOError on my non-blocking socket: 'a non-blocking socket operation could not be completed immediately"
Needless to say, I was not expecting this, and was about to tear my remaining hair out about having to completely restructure the code in order to be able to handle an EINTR on a read on an FD that I got back from select as ready, until I realized that the way the code had evolved the only thing I still needed the select for was the timeout, and that the EINTR bug in sockets with a timeout had already been fixed (thank goodness I'm able to use python3.4 for this project). I got lucky, but this is clearly a serious problem for writing selectors based code on Windows.
This should tell you just about everything you need to know about why we want to fix this problem so that things work cross platform.