i've actually verified that the code i initially posted "works" when talking over the network to a totally unrelated program (not written in perl). so it really does seem that perl's alarm() can interrupt blocking reads (that use IO::Socket::INET). i'm not so sure if this will "work" consistently if there's a huge lot of message traffic though.

the template you posted is extremely similar to what i was using (except for the additional alarm in the eval test). i'll add that na rin (although it "works" without..)



On 11/21/05, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
----- Original Message -----
From: Orlando Andico
To: The Main Philippine Linux Users' Group (PLUG) Discussion List
Sent: Monday, November 21, 2005 1:21 PM
Subject: Re: [plug] Perl: handling blocking reads "nicely"

> but does signal() interfere with blocking I/O?

yes

> according to perldelta  for version 5.8 if there is no pending I/O
> (e.g. read is blocking on a socket) then alarm() will interrupt it
> successfully.
> but if I/O is pending, the I/O will complete before the alarm() is
> delivered.
> this behavior is ok with me.  :)

could you try this template?

SIG{ALRM} = sub { die "timeout" };

eval {
    alarm(1);
    # your operations here
    alarm(0);
};

if ($@) {
    if ($@ =~ /timeout/) {
        # timed out; do what you will here
    } else {
        alarm(0);    # clear the still-pending alarm
        die;            # propagate unexpected exception
    }
}

fooler.


_________________________________________________
Philippine Linux Users' Group (PLUG) Mailing List
[email protected] (#PLUG @ irc.free.net.ph)
Read the Guidelines: http://linux.org.ph/lists
Searchable Archives: http://archives.free.net.ph

_________________________________________________
Philippine Linux Users' Group (PLUG) Mailing List
[email protected] (#PLUG @ irc.free.net.ph)
Read the Guidelines: http://linux.org.ph/lists
Searchable Archives: http://archives.free.net.ph

Reply via email to