Net::Ping
Pavel Smerk
xsmerk na informatics.muni.cz
Pátek Září 20 11:05:48 MEST 2002
On Fri, Sep 20, 2002 at 10:39:48AM +0200, Honza Pazdziora wrote:
> On Wed, Sep 18, 2002 at 04:26:09PM +0200, Pavel Smerk wrote:
> >
> > nahodou jsem zabrousil do Net/Ping.pm a koukam, ze v ping_tcp je nasledujici
> > kousek kodu:
> >
> > $SIG{'ALRM'} = sub { die };
> > alarm($timeout); # Interrupt connect() if we have to
> >
> > $ret = 0; # Default to unreachable
> > eval <<'EOM' ;
> > return unless connect($self->{"fh"}, $saddr);
> > $ret = 1;
> > EOM
> > alarm(0);
> >
> > Nemuze se stat, ze kdyz pouziju Net::Ping a zkusim nekam pingnout, pri
> > vhodne konstelaci hvezd umru? Konkretne mi pripada, ze pokud instrukce mezi
> > alarm($timeout) a koncem prikazu eval budou trvat "presne" $timeout, muze mi
> > byt poslan SIGALRM v dobe kdy uz nejsem v evalu, ale jeste jsem nestihl
> > zrusit timer. Nemelo by v eval byt jeste nejake $SIG{ALRM} = ...? Nebo neco
> > funguje jinak, nez si myslim?
>
> Vypada to tak. Zkus si dat dostatecne dlouhy sleep za ten eval.
Ale to me prece zabije! ;-)
> Asi by nebylo od veci dat ten alarm(0) i do toho evalu dovnitr.
Jevi se mi to zhruba takto:
eval <<'EOM' ;
alarm(0) and return unless connect($self->{"fh"}, $saddr);
alarm(0);
$ret = 1;
EOM
a zrusit alarm(0) za evalem. Zkusim to asi napsat autorovi (predpokladam, ze
tak nejak to v tomhle svete funguje ;-).
P.
Další informace o konferenci Perl