Issue555085
Created on 2002-05-12 12:11 by mgilfix, last changed 2002-08-08 20:41 by gvanrossum. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| timeoutsocket.diff | mgilfix, 2002-05-12 12:11 | |||
| test_timeout.py | mgilfix, 2002-05-12 12:12 | |||
| timeoutsocket.patch.2 | mgilfix, 2002-06-05 22:17 | Version 2 of the timeout socket patch | ||
| test_timeout.py.2 | mgilfix, 2002-06-05 22:20 | Version 2 of timeout functionality test | ||
| socketmodule.c.nb-connect.diff | aimacintyre, 2002-08-04 06:54 | socketmodule.c:- fix for non-blocking connect not handling EISCONN on non-Windows systems | ||
| test_socket.py.sendall.diff | aimacintyre, 2002-08-04 07:09 | test_socket.py:- rejig the sendall() test | ||
| Messages (12) | |||
|---|---|---|---|
| msg40005 - (view) | Author: Michael Gilfix (mgilfix) | Date: 2002-05-12 12:11 | |
This implements bug #457114 and implements timed socket operations. If a timeout is set and the timeout period elaspes before the socket operation has finished, a socket.error exception is thrown. This patch integrates the functionality at two levels: the timeout capability is integrated at the C level in socketmodule.c. Socket.py was also modified to update fileobject creation on a win platform to handle the case of the underlying socket throwing an exception. The tex documentation was also updated and a new regression unit was provided as test_timeout.py. |
|||
| msg40006 - (view) | Author: Guido van Rossum (gvanrossum) * ![]() |
Date: 2002-05-23 20:18 | |
Logged In: YES user_id=6380 For a detailed review, see http://mail.python.org/pipermail/python-dev/2002-May/024340.html |
|||
| msg40007 - (view) | Author: Michael Gilfix (mgilfix) | Date: 2002-06-05 22:23 | |
Logged In: YES user_id=116038 I've addressed all the issues brought up by Guido. The 2nd version of the patch is attached here. In this version, I've modified test_socket.py to include tests for the _fileobject class in socket.py that was modified by this patch. _fileobject needed to be modified so that data would not be lost when the underlying socket threw an expection (data was no longer accumulated in local variables). The tests for the _fileobject class succeed on older versions of python (tested 2.1.3) and pass on the newer version of python. |
|||
| msg40008 - (view) | Author: Guido van Rossum (gvanrossum) * ![]() |
Date: 2002-06-06 21:11 | |
Logged In: YES user_id=6380 Thanks for the new version! I've checked this in. I made considerable changes; the following is feedback but you don't need to respond because I've addressed all these in the checked-in code! - Thanks for the cleanup of some non-standard formatting. However, it's better not to do this so the diffs don't show changes that are unrelated to the timeout patch. - You are still importing the select module instead of calling select() directly. I really think you should do the latter -- the select module has an enormous overhead (it allocates several large lists on the heap). - Instead of explicitly testing the argument to settimeout for being a float, int or long, you should simply call PyFloat_AsDouble and handle the error; if someone passes another object that implements __float__ that should be acceptable. - gettimeout() returns sock_timeout without checking if it is NULL. It can be NULL when a socket object is never initialized. E.g. I can do this: >>> from socket import * >>> s = socket.__new__(socket) >>> s.gettimeout() which gives me a segfault. There are probably other places where this is assumed. - I addressed the latter two issues by making sock_timeout a double, whose value is < 0.0 when no timeout is set. |
|||
| msg40009 - (view) | Author: Guido van Rossum (gvanrossum) * ![]() |
Date: 2002-06-08 01:47 | |
Logged In: YES user_id=6380 Keeping this open as a reminder of things still to finish. Most is in the python-dev discussion; Michael Gilfix and Bernard Yue have offered to produce more patches. One feature we definitely want is a way to specify a timeout to be applied to all new sockets. |
|||
| msg40010 - (view) | Author: Guido van Rossum (gvanrossum) * ![]() |
Date: 2002-07-18 17:11 | |
Logged In: YES user_id=6380 The default timeout is now implemented in CVS. There's a bug report from Andrew Macintyre (unfortunately on python-dev) about test_socket.py failures on FreeBSD. I'll try to keep an eye on that, so this patch *still* stays open. Also, Bernie has promised some changes that I haven't received yet and the details of which I don't recall (sorry :-( ). |
|||
| msg40011 - (view) | Author: Michael Gilfix (mgilfix) | Date: 2002-07-23 20:43 | |
Logged In: YES user_id=116038 Now that I'm back :) I checked the archive and this seems to have been handled by you. Please let me know if it isn't resolved and I can give it a closer look. Also, perhaps I should contact Bernie and ask him if there's anything he hasn't gotten around to in the test_timeout that I can off-load from him. |
|||
| msg40012 - (view) | Author: Andrew I MacIntyre (aimacintyre) * | Date: 2002-07-30 02:28 | |
Logged In: YES user_id=250749 In private mail to/from Guido, it appears that the FreeBSD issues were in test_socket.py, and have been addressed. I still have outstanding issues on OS/2 EMX, which I sent to Guido privately but will add here as soon as I can. |
|||
| msg40013 - (view) | Author: Michael Gilfix (mgilfix) | Date: 2002-07-30 14:25 | |
Logged In: YES user_id=116038 If Guido is busy (And I'm sure he is), I'd be willing to take a hack at the problem if you could email me privately and provide a testing environment (No OS/2 EMX in my apt ;) ). |
|||
| msg40014 - (view) | Author: Guido van Rossum (gvanrossum) * ![]() |
Date: 2002-07-30 18:41 | |
Logged In: YES user_id=6380 Michael and Andrew, if you can deal with this without my involvement I would greatly appreciate it. ;-) |
|||
| msg40015 - (view) | Author: Andrew I MacIntyre (aimacintyre) * | Date: 2002-08-04 07:09 | |
Logged In: YES user_id=250749 After discussing the OS/2 issues privately with Michael, the outstanding issues are resolved with the socketmodule.c and test_socket.py patches I've uploaded here. socketmodule.c.nb-connect.diff: in the non-blocking connect, OS/2 is returning EINPROGRESS from the initial connection attempt, and after the internal_select(), the subsequent connection attempt returns EISCONN. this appears to be perfectly legitimate, although FreeBSD and Linux haven't been seen to return the EINPROGRESS. the patch adds specific handling for the EISCONN after EINPROGRESS case, matching the semantics already in place for the Windows version of the code. test_socket.py.sendall.diff: the existing sendall() test is flawed as the recv() call makes no guarantees about waiting for all the data requested. OS/2 required a 100ms sleep in the recv loop to get all the data. rewriting the reciev test to allow for recv() not waiting for data still in transit is more correct. Note that these interpretations of "correctness" have been based on FreeBSD manpages, which is the only sockets documentation I currently have. If these are acceptable to Guido, and Michael gets to test them on Linux, I can relieve Guido of committing them and closing this patch. |
|||
| msg40016 - (view) | Author: Guido van Rossum (gvanrossum) * ![]() |
Date: 2002-08-08 20:41 | |
Logged In: YES user_id=6380 Andrew, I've checked in your patches. I had to review them anyway and I decided to rewrite the testSendAll() check to be more informative. Thanks! If there are other unsolved issues, please open a new bug report and assign it to me. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2002-05-12 12:11:05 | mgilfix | create | |
