Perl Timeout et Module DHCP Watch
Bonjour à tous,
Je suis actuellement entrain d'écrire un petit script pour vérifier qu'un serveur DHCP fonctionne. Si il fonctionne je dois indiquer le temps pris par la requête. Si il ne fonctionne pas (ou si il prend + de X secondes), je dois mettre un message d'erreur.
Pour ce faire, j'utilise le module NET::DHCP::WATCH (http://search.cpan.org/~ejdrs/Net-DH...-2.03/Watch.pm et le module Object::Destroyer (conseillé par Jedai : http://www.developpez.net/forums/d36...-timeout-perl/).
J'ai d’abord créé un petit script pour vérifier que mon implémentation de l'alarm fonctionne :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| use Object::Destroyer;
eval {
local $SIG{ALRM} = sub { die("alarm\n") };
alarm(4);
my $sentry = Object::Destroyer->new( sub {alarm(0)} );
#Get Status
sleep (2)
};
if ($@) {
print "Je rentre via l'alarm";
}
else {
print "je ne rentre pas via l'alarm";} |
Ce script fonctionne donc le code pour l'alarm aussi.
Je passe donc au script pour tester le serveur DHCP :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| use Time::HiRes;
use Object::Destroyer;
use Net::DHCP::Watch;
# server name
my $Server = '192.168.1.1';
# this machine ip and ethernet address
my $IP = '192.168.1.2';
my $Ether = '00:23:CD:CE:43:DC';
my $timeout = 5;
my $stat ='';
# Net::DHCP::Watch object
my $dhcpw = new Net::DHCP::Watch({
server => $Server,
client => $IP,
ether => $Ether,
timeout => $timeout
});
# Open network
$dhcpw->watch();
my $start = [ Time::HiRes::gettimeofday( ) ];
eval {
local $SIG{ALRM} = sub { die("alarm\n") };
alarm(4);
my $sentry = Object::Destroyer->new( sub {alarm(0)} );
#Get Status
$stat = $dhcpw ->status;
};
if ($@) {
print "Error";
}
else {
$elapsed = Time::HiRes::tv_interval( $start );
$elapsed = $elapsed * 1000;
# print results
if ( $stat->{Ok} )
{
print "Remote DHCP $Server online.\n";
print "Dhcptime;$elapsed;ms";
}
else
{ print "Error";
}
} |
Quand je mets un bon serveur DHCP qui fonctionne, il m'indique assez rapidement la bonne réponse.
Quand j'indique un serveur qui n'est pas bon (et donc sans service DHCP), il reste coincé dans la fonction "$dhcpw ->status;" et ne veut pas en sortir malgré mon alarm et mon timeout.
Je n'arrive pas à le faire sortir de cette fonction. Est-ce relatif au module DHCP? Si c'est le cas, je n'arrive pas à comprendre pourquoi je ne sais pas le faire stopper.
Un grand merci pour votre aide!