I've more or less completed the introduction of timeout sockets. Executive summary: after sock.settimeout(T), all methods of sock will block for at most T floating seconds and fail if they can't complete within that time. sock.settimeout(None) restores full blocking mode. I've also done some long-needed rigorous cleanup of the socket module source code, e.g. I got rid of the PySock* static names. Remaining issues: - A test suite. There's no decent test suite for the timeout code. The file test_timeout.py doesn't test the functionality (as I discovered when the test succeeded while I had several blunders in the select code that made everything always time out). - Cross-platform testing. It's possible that the cleanup broke things on some platforms, or that select() doesn't work the same way. I can only test on Windows and Linux; there is code specific to OS/2 and RISCOS in the module too. - I'm not sure that the handling of timeout errors in accept(), connect() and connect_ex() is 100% correct (this code sniffs the error code and decides whether to retry or not). - Should sock.settimeout(0.0) mean the same as sock.setblocking(0)? Currently it sets a timeout of zero seconds, and that behaves pretty much the same as setting the socket in nonblocking mode -- but not exactly. Maybe these should be made the same? - A socket filedescriptor passed to fromfd() is now assumed to be in blocking, non-timeout mode. - The socket.py module has been changed too, changing the way buffering is done on Windows. I haven't reviewed or tested this code thoroughly. I hope some of the developers on this list will help me out with all this! In the mean time, many thanks to Michael Gilfix who did most of the thinking and coding. --Guido van Rossum (home page: http://www.python.org/~guido/)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4