OVH Cloud OVH Cloud

Socket suicide

2 réponses
Avatar
Delf
Bonjour.

J'ai écrit un script qui recoit une cinquantaine de connexions clientes
en l'espace de 1 ou 2 secondes et ce, tous les quart d'heure. Voici le
code principal :

if (defined($serverConnection)) {
print "Serveur en ecoute sur le port $listenedPort.\n" if ($Verbose);
my $Controller = Thread->new(\&ControllerThread);
while (my $clientConnection = $serverConnection->accept()) {
my $getMessage = <$clientConnection>;
if (defined $getMessage) {
chomp($getMessage);
my $ClientThread = Thread->new(\&ConnectionThread,
$clientConnection, $getMessage);
$ClientThread->detach;
}
else {
print $clientConnection "Le client que vous utilisez est
défectueux.\n";
}
}
}

Au d'une dizaine d'heure, aucune connexion ne peut s'établir entre le
serveur et les clients bien que ce dernier reste en écoute... (le script
ne rend pas la main, il doit être dans l'instruction while()).

Je pense donc que le socket se tue... pourquoi ? Possible ? Je sais plus
quoi faire...

Merci d'avance.

--
Delf

2 réponses

Avatar
Delf

[...]


Personne ne sait ? :(

--
Delf

Avatar
no
On Wed, 29 Dec 2004 00:32:15 +0100, Delf wrote:

Bonjour.

J'ai écrit un script qui recoit une cinquantaine de connexions clientes
en l'espace de 1 ou 2 secondes et ce, tous les quart d'heure. Voici le
code principal :

if (defined($serverConnection)) {
print "Serveur en ecoute sur le port $listenedPort.n" if ($Verbose);
my $Controller = Thread->new(&ControllerThread); while (my
$clientConnection = $serverConnection->accept()) {
my $getMessage = <$clientConnection>; if (defined $getMessage) {


Il vaut mieux « forker » un thread juste après le accept afin de
liberer le process principal et qu'il re-accepte d'autre clients pendant
que ton thread gère la lecture bloquante sur la socket.

chomp($getMessage);
my $ClientThread = Thread->new(&ConnectionThread,
$clientConnection, $getMessage);
$ClientThread->detach;
}
else {
print $clientConnection "Le client que vous utilisez est
défectueux.n";
}
}
}
}
Au d'une dizaine d'heure, aucune connexion ne peut s'établir entre le
serveur et les clients bien que ce dernier reste en écoute... (le script
ne rend pas la main, il doit être dans l'instruction while()).



`netstat -tanp' te donne quoi sur le serveur ?

Je pense donc que le socket se tue... pourquoi ? Possible ? Je sais
plus quoi faire...


Tracer qui se connecte, le nombre de connexions/thread en cours, l'état
des connexions/thread avec les clients, quand les connexions/thread se
terminent, etc.


Merci d'avance.