[Python-Dev] Testing Socket Timeouts patch 1519025 (original) (raw)
Tony Nelson tonynelson at georgeanelson.com
Sun Jul 30 00🔞41 CEST 2006
- Previous message: [Python-Dev] Testing Socket Timeouts patch 1519025
- Next message: [Python-Dev] Testing Socket Timeouts patch 1519025
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
At 2:38 PM -0700 7/29/06, Josiah Carlson wrote:
Tony Nelson <tonynelson at georgeanelson.com> wrote:
I'm trying to write a test for my Socket Timeouts patch [1], which fixes signal handling (notably Ctl-C == SIGINT == KeyboarInterrupt) on socket operations using a timeout. I don't see a portable way to send a signal, and asking the test runner to press Ctl-C is a non-starter. A "real" signal is needed to interrupt the select() (or equivalent) call, because that's what wasn't being handled correctly. The bug should happen on the other platforms I don't know how to test on. Is there a portable way to send a signal? SIGINT would be best, but another signal (such as SIGALRM) would do, I think. According to my (limited) research on signals, Windows signal support is horrible. I have not been able to have Python send signals of any kind other than SIGABRT, and then only to the currently running process, which kills it (regardless of whether you have a signal handler or not).
Hmm, OK, darn, thanks. MSWindows does allow users to press Ctl-C to send a KeyboardInterrupt, so it's just too bad if I can't find a way to test it from a script.
If not, should I write the test to only work on systems implementing SIGALRM, the signal I'm using now, or implementing kill(), or what? I think that most non-Windows platforms should have non-braindead signal support, though the signal module seems to be severely lacking in sending any signal except for SIGALRM, and the os module has its fingers on SIGABRT.
The test now checks "hasattr(signal, 'alarm')" before proceeding, so at least it won't die horribly.
If someone is looking for a project for 2.6 that digs into all sorts of platform-specific nastiness, they could add actual signal sending to the signal module (at least for unix systems).
Isn't signal sending the province of kill (2) (or os.kill()) in python)? Not that I know much about it.
BTW, I picked SIGALRM because I could do it all with one thread. Reading POSIX, ISTM that if I sent the signal from another thread, it would bounce off that thread to the main thread during the call to kill(), at which point I got the willies. OTOH, if kill() is more widely available than alarm(), I'll give it a try, but going by the docs, I'd say it isn't.
TonyN.:' <mailto:tonynelson at georgeanelson.com> ' <http://www.georgeanelson.com/>
- Previous message: [Python-Dev] Testing Socket Timeouts patch 1519025
- Next message: [Python-Dev] Testing Socket Timeouts patch 1519025
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]