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