Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1079 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Sockets et Threads sont sur un bateau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Sockets et Threads sont sur un bateau

n°2019104
ccp6128
Syntax error
Posté le 26-08-2010 à 12:06:13  profilanswer
 

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
mood
Publicité
Posté le 26-08-2010 à 12:06:13  profilanswer
 

n°2019121
gilou
Modérateur
Modzilla
Posté le 26-08-2010 à 13:25:56  profilanswer
 

use Coro;
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2019202
ccp6128
Syntax error
Posté le 26-08-2010 à 17:24:30  profilanswer
 

Je vais regarder ca, mais je reste curieux de savoir pourquoi ce que j'essaie de faire avec des threads ne marche pas.

n°2020114
ccp6128
Syntax error
Posté le 31-08-2010 à 15:34:40  profilanswer
 

Up. C'est moi ou Coro n'est pas adapté a ce que je veux faire ? A priori c'est adapté pour faire du multithread coopératif, et j'ai besoin d'un comportement préemptif.

n°2020154
gilou
Modérateur
Modzilla
Posté le 31-08-2010 à 16:20:34  profilanswer
 

En lisant un peu la doc, j'ai plutôt l'impression que ton code devrait plutôt ressembler à ceci:
my $client = threads->new(\&ClientDHCP);
if ($client->is_running()) {
   sleep($o_timeout);
}
if ($client->is_joinable()) {
   $client->join();
}  
else {
  $client->kill('TERM')->detach();
}
exit 0;  
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2020177
ccp6128
Syntax error
Posté le 31-08-2010 à 16:55:37  profilanswer
 

That's right, ca a l'air de marcher beaucoup mieux. Merci.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Sockets et Threads sont sur un bateau

 

Sujets relatifs
thread et socketsutilisation des threads
threads en chat sur PythonThreads synchronisés ?
[C#] threads et communicationMFC & Threads problème de compréhension
[java] Petite question sur les threadsSockets asynchrones en C sous Windows
[Pascal / SDL] Problème pour gérer les ThreadsSynchronisation entre threads
Plus de sujets relatifs à : Sockets et Threads sont sur un bateau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR