Bonjour,
Je suis en train de modifier un code qui fonctionne mais qui ne
medonne pas encore satisfaction.
Le code de ce serveur cr=E9e 2 fils afin de r=E9ponde 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=E9moire... 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=E8res
--------------------------------------------------------------------
$server =3D IO::Socket::INET->new(
LocalPort =3D> 3500,
Type =3D> SOCK_STREAM,
Reuse =3D> 1,
Listen =3D> 5
) or die "Cr=E9ation du serveur impossible.\n";
print "D=E9marrage du serveur ..\n";
while ($client =3D $server->accept()) {
print $client "Le serveur dit 'bonjour' au client !\n";
$pid =3D fork; # dans le p=EAre on fork()
die "Je ne peux pas forker !" if ! defined ($pid); # si le fork
echoue
if ($pid =3D=3D 0) { # on est dans le fils qui =E9coute le client
# on cree un 2eme fils
$pid_fils =3D fork ();
if ($pid_fils =3D=3D 0) { # on est dans le petit fils qui =E9crit pour le
client
# print "Petit fils 1 : ".$pid_fils."\n";
# c'est le processus enfant, charg=E9 de l'=E9coute des clients
while ($ligne =3D <$client> ) {
print "client> $ligne";
$chaine =3D $ligne;
# traitements divers
} # fin du while
} else {
# c'est le p=E8re qui pendant ce temps r=E9pond au client #
while ($ligne =3D <>) {
print $client $ligne;
}
} # fin if ($pid_fils =3D=3D 0)
# } else {
# print "Pere : Ecoute\n";
} # fin if ($pid =3D=3D 0) { # on est dans le fils qui =E9coute le client
} #fin while ($client =3D $server->accept())
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Paul Gaborit
À (at) Tue, 19 Jun 2007 08:35:26 -0700, Erol écrivait (wrote):
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 :
Lire la deuxième partie (celle qui parle de l'appel système 'select(2)').
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) Tue, 19 Jun 2007 08:35:26 -0700,
Erol <erol.elisabeth@gmail.com> écrivait (wrote):
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 :
À (at) Tue, 19 Jun 2007 08:35:26 -0700, Erol écrivait (wrote):
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 :