> perl -v 5.8.4

Dear monks, On a production system where updates to Perl versions are not possible, I came across this SIG{ALRM} robber. Yes, dear monks, LWP stands accused. My question: can I go to bed with this robber?

Consider this code:
eval { local $SIG{ALRM} = sub { die "Network Timeout/Error\n" }; alarm($maxNetworkDelay); $ip=URL_encode($ip); $encodedMAC=URL_encode($mac); my $macr="https://somescript/login; $request = HTTP::Request->new(GET => $macr); $ua = LWP::UserAgent->new( timeout => $maxNetworkDelay ); $response = $ua->request($request); $respcon = $response->content; alarm(0); }; <strike> if($@){ ilog("Network Delay/Error for ."); return (-1); }# </strike> if($response->status_line =~ /^500/ ){ ilog("Network Delay/Error for ."); return (-1); }

I have read whatever there is publicly and from what I understood, decided to write the above since DNS errors/network latency/wrong domain name are _ALL_ trapped by the above code.

As you can see, when using eval with LWP, _your_ error catching mechanism ( the parts struck out ) will not work since LWP internally has a mechanism of its own. What we can test, however is whether LWP has caught the alarm I have triggered.

I am seeking to understand the what is going on. The above code works all the time to satisfaction. My questions are:

  • 1. It looks like a process can have only one SIG{ALRM}
  • 2. An alarm set is caught by the whatever alarm handling mechanism that is in scope - in our case, the alarm handling mechanism in LWP.
  • 3. Once caught. $@ is read, handled, and reset.
  • 4. Finally,do the monks approve of this?

    In reply to The curious case of LWP - the SIG{ALRM} robber by MonkeyMonk

    Title:
    Use:  <p> text here (a paragraph) </p>
    and:  <code> code here </code>
    to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.