[Python-Dev] Testing Socket Timeouts patch 1519025
Tony Nelson
tonynelson at georgeanelson.com
Sun Jul 30 00:18:41 CEST 2006
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/>
More information about the Python-Dev
mailing list