Terminer un fils dans le cas de SOCKET AFINET

Le
Erol
Bonjour,
Je suis en train de modifier un code qui fonctionne mais qui ne
medonne pas encore satisfaction.
Le code de ce serveur crée 2 fils afin de réponde en Lecture &
Ecriture aux fils avec qui il communique.
Le probleme est que si le fils termine brutalement pour une raison ou
une autre en cours
de discussion, le serveur laisse les 2 fils actifs en mémoire et
cela arrive souvent dans mon cas.

Est-il possible de forcer la fermeture du processus si il n'y a pas de
discussion au bout de 10minutes par exemple MErci pour vos lumières
--
$server = IO::Socket::INET->new(
LocalPort => 3500,
Type => SOCK_STREAM,
Reuse => 1,
Listen => 5
) or die "Création du serveur impossible.";
print "Démarrage du serveur ..";

while ($client = $server->accept()) {

print $client "Le serveur dit 'bonjour' au client !";

$pid = fork; # dans le pêre on fork()
die "Je ne peux pas forker !" if ! defined ($pid); # si le fork
echoue
if ($pid == 0) { # on est dans le fils qui écoute le client

# on cree un 2eme fils
$pid_fils = fork ();
if ($pid_fils == 0) { # on est dans le petit fils qui écrit pour le
client
# print "Petit fils 1 : ".$pid_fils."";
# c'est le processus enfant, chargé de l'écoute des clients

while ($ligne = <$client> ) {
print "client> $ligne";
$chaine = $ligne;
# traitements divers
} # fin du while
} else {
# c'est le père qui pendant ce temps répond au client #
while ($ligne = <>) {
print $client $ligne;
}
} # fin if ($pid_fils == 0)
# } else {
# print "Pere : Ecoute";

} # fin if ($pid == 0) { # on est dans le fils qui écoute le client
} #fin while ($client = $server->accept())


Merci de vos lumières
Erol
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Paul Gaborit
Le #146309
À (at) Tue, 19 Jun 2007 08:35:26 -0700,
Erol
Bonjour,
Je suis en train de modifier un code qui fonctionne mais qui ne
medonne pas encore satisfaction.
Le code de ce serveur crée 2 fils afin de réponde en Lecture &
Ecriture aux fils avec qui il communique.
~~~~~~~~~

aux clients (?)
Le probleme est que si le fils termine brutalement pour une raison ou
une autre en cours
de discussion, le serveur laisse les 2 fils actifs en mémoire... et
cela arrive souvent dans mon cas.


Si le fils meurt, il ne peut rester que le petit-fils... non ?

En fait, je n'ai pas vraiment compris l'architecture de votre système.

Est-il possible de forcer la fermeture du processus si il n'y a pas de
discussion au bout de 10minutes par exemple...


Je pense que l'utilisation de 'select' doit répondre à votre
besoin. Pour en savoir plus :

perldoc -f select

ou (en français) :


Lire la deuxième partie (celle qui parle de l'appel système
'select(2)').

--
Paul Gaborit - Perl en français -
Publicité
Poster une réponse
Anonyme