Bonjour à tous;

J'ai un processus perl qui reçoit des données d'un pipe et les traite.
Je dois rajouter des données venant du réseau.
J'ai construit un serveur TCP qui fait bien le travail, indépendamment du premier processus, et c'est dommage, car les deux processus travaillent sur des données qui peuvent être identiques.
Donc j'ai pensé à inclure ce serveur dans le premier processus pour qu'il puisse vérifier si les données qu'il reçoit du réseau sont déjà présentes, et dans ce cas, les droper.

Voici mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
my $server = server->new();
my $thread = threads->create(sub {$server->server();});
my $thread2 = threads->create(sub {
while(<STDIN>) {
    ...instructions et traitement des données ...
Donc je lance le processus. Il se lance correctement et fait les tâches de traitement des données venant du pipe.
Je me connecte en telnet. La connexion se fait sans problème. Mais les données que j'envoie au serveur ne sont pas traitées.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
sub server {
	my($self) = @_;
	while (my $client = $serveur->accept()) {
		next if my $pid = fork;
		print "\n*** Connected ***\n"; # -> ça s'affiche bien
		print "--- I am PID $$ ---\n"; # ça s'affiche aussi
		my $message = "";
		while( my $rep = <$client> ) {
			print "oui\n"; # -> ça ne s'affiche pas
Je pense que la ligne blocante est celle en gras. Mais je ne vois pas de moyen de m'en sortir du coup: Si la méthode accept est blocante, je ne peux jamais mettre ça dans un thread :-S Il doit bien y avoir une solution? Ce problème me parait basique, mais google ne m'a pas trop aidé :-S
Merci pour vos conseils/remarques/suggestions!