|No such thing as a small change|
Timeouts: Any alternative to alarm in Win32?by jbbarnes (Novice)
|on Dec 03, 2008 at 10:44 UTC||Need Help??|
jbbarnes has asked for the wisdom of the Perl Monks concerning the following question:
It seems that ActiveState's Win32 implementation of alarm will not terminate blocking system calls. Consider this brief example:
You can run this such as "test.pl smtp.myisp.com:25" to return your ISP's mail server ID. Under Linux, the alarm will break in after 5 seconds with no response. Under Win32, using alarm will not interrupt the process.
Every Perl networking book I have recommends this technique to handle timeouts, but you are stuck with a 20+ second wait under Windows.
Is there any other way to get control back faster? Perhaps a way to specify a timeout value associated with the read command?
Thanks for your advice.
UPDATE: Thank you for all the very quick and helpful answers. Yes, a lighter-weight solution is preferable. But if not possible, then any solution is better than none. This is part of a project replacing a Windows .exe with cross-platform code. So it needs to run on both Linux and the older Windows boxes. So far it has been very successful, until this snag.
There is a Timeout argument to new() when creating the socket, but apparently that only applies to connect() and accept().