J'essaie de créer un client DHCP en Perl. L'objectif étant que je puisse interroger un serveur DHCP avec un timeout réglable, et spécifier un certain nombre de tentatives max.
Pas de soucis particuliers pour envoyer / recevoir les requêtes via des sockets. Le souci qui se pose pour moi est de limiter le(la-les, je sais jamais si c'est masculin ou féminin) socket en réception pour qu'il n'écoute qu'un nombre déterminé de secondes.
Je me suis donc dit, utilisons les threads. Je lance un thread contenant la logique de mon client DHCP, puis dans le programme principal je fais un sleep() puis j'essaie d'envoyer un signal au thread afin qu'il stoppe.
En code, ca donne ca :
sub ClientDHCP{
$SIG{'TERM'} = sub { threads->exit(); };
#Code d'envoi / réception de paquets, faisant appel a d'autres fonctions, notamment un socket en écoute pour recevoir la réponse du DHCP.
}
my $client = threads->new(\&ClientDHCP);
sleep $o_timeout;
$client->kill('TERM');
$client->join();
exit 0;
|
Souci, cela ne marche pas. Le join() bloque indéfiniment.
Deuxième question subsidiaire : y'a quoi de mieux pour nettoyer mon thread proprement avant de quitter ? je pensais mettre les sockets ouverts dans un tableau, pour pouvoir les close() avant de quitter.
Message édité par ccp6128 le 26-08-2010 à 12:07:13