J'ai un programme qui écoute sur port via IO::Socket.
Lorsqu'un nouveau client arrive, il lance un thread dans lequel il communique
avec le client.
Mon problème est le suivant. J'ai deux clients qui se connectent. Un client A
et un client B. Deux threads (A et B) sont donc crées.
J'ai un hash qui est partagé entre les threads qui contient la liste
des clients.
Dedans, j'aimerai stocker le handle retourné par
$server->accept().
Afin que le client B puisse envoyer des datas au
client A via $hash{"clientA"}{"socket"}.
Or ça ne marche pas...
Lorsque que dans le thread je copie le socket dans mon tableau de hash,
j'ai l'erreur :
thread failed to start: Invalid value for shared scalar at
./main.pl line 175, <GEN2> line 12.
Ce n'est pas faute d'avoir cherché, mais je ne trouve pas de solution :-/
Si quelqu'un pouvait m'eclairer...
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
Scetbon Cyril
Tu peux utiliser une file :
perldoc Thread::Queue
Ton thread B ecrit dans la file et le thread A lit le message passe pour l'envoyer dans sa socket.
Bonjour,
J'ai un programme qui écoute sur port via IO::Socket. Lorsqu'un nouveau client arrive, il lance un thread dans lequel il communique avec le client.
Mon problème est le suivant. J'ai deux clients qui se connectent. Un client A et un client B. Deux threads (A et B) sont donc crées.
J'ai un hash qui est partagé entre les threads qui contient la liste des clients. Dedans, j'aimerai stocker le handle retourné par $server->accept(). Afin que le client B puisse envoyer des datas au client A via $hash{"clientA"}{"socket"}. Or ça ne marche pas... Lorsque que dans le thread je copie le socket dans mon tableau de hash, j'ai l'erreur : thread failed to start: Invalid value for shared scalar at ./main.pl line 175, <GEN2> line 12.
Ce n'est pas faute d'avoir cherché, mais je ne trouve pas de solution :-/ Si quelqu'un pouvait m'eclairer...
Adrien
Tu peux utiliser une file :
perldoc Thread::Queue
Ton thread B ecrit dans la file et le thread A lit le message passe pour
l'envoyer dans sa socket.
Bonjour,
J'ai un programme qui écoute sur port via IO::Socket.
Lorsqu'un nouveau client arrive, il lance un thread dans lequel il communique
avec le client.
Mon problème est le suivant. J'ai deux clients qui se connectent. Un client A
et un client B. Deux threads (A et B) sont donc crées.
J'ai un hash qui est partagé entre les threads qui contient la liste
des clients.
Dedans, j'aimerai stocker le handle retourné par
$server->accept().
Afin que le client B puisse envoyer des datas au
client A via $hash{"clientA"}{"socket"}.
Or ça ne marche pas...
Lorsque que dans le thread je copie le socket dans mon tableau de hash,
j'ai l'erreur :
thread failed to start: Invalid value for shared scalar at
./main.pl line 175, <GEN2> line 12.
Ce n'est pas faute d'avoir cherché, mais je ne trouve pas de solution :-/
Si quelqu'un pouvait m'eclairer...
Ton thread B ecrit dans la file et le thread A lit le message passe pour l'envoyer dans sa socket.
Bonjour,
J'ai un programme qui écoute sur port via IO::Socket. Lorsqu'un nouveau client arrive, il lance un thread dans lequel il communique avec le client.
Mon problème est le suivant. J'ai deux clients qui se connectent. Un client A et un client B. Deux threads (A et B) sont donc crées.
J'ai un hash qui est partagé entre les threads qui contient la liste des clients. Dedans, j'aimerai stocker le handle retourné par $server->accept(). Afin que le client B puisse envoyer des datas au client A via $hash{"clientA"}{"socket"}. Or ça ne marche pas... Lorsque que dans le thread je copie le socket dans mon tableau de hash, j'ai l'erreur : thread failed to start: Invalid value for shared scalar at ./main.pl line 175, <GEN2> line 12.
Ce n'est pas faute d'avoir cherché, mais je ne trouve pas de solution :-/ Si quelqu'un pouvait m'eclairer...
Adrien
Bacto
Tu peux utiliser une file :
perldoc Thread::Queue
Ton thread B ecrit dans la file et le thread A lit le message passe pour l'envoyer dans sa socket.
Merci pour ta réponse :) Je commençai à desesperer ! Le problème (ou alors j'ai raté quelque chose ?), c'est qu'en passant par une queue, je bloque mon thread A pour qu'il puisse le lire, je ne me trompe pas ?
Cordialement, Adrien
Bonjour,
J'ai un programme qui écoute sur port via IO::Socket. Lorsqu'un nouveau client arrive, il lance un thread dans lequel il communique avec le client.
Mon problème est le suivant. J'ai deux clients qui se connectent. Un client A et un client B. Deux threads (A et B) sont donc crées.
J'ai un hash qui est partagé entre les threads qui contient la liste des clients. Dedans, j'aimerai stocker le handle retourné par $server->accept(). Afin que le client B puisse envoyer des datas au client A via $hash{"clientA"}{"socket"}. Or ça ne marche pas... Lorsque que dans le thread je copie le socket dans mon tableau de hash, j'ai l'erreur : thread failed to start: Invalid value for shared scalar at ./main.pl line 175, <GEN2> line 12.
Ce n'est pas faute d'avoir cherché, mais je ne trouve pas de solution :-/ Si quelqu'un pouvait m'eclairer...
Adrien
Tu peux utiliser une file :
perldoc Thread::Queue
Ton thread B ecrit dans la file et le thread A lit le message passe pour
l'envoyer dans sa socket.
Merci pour ta réponse :) Je commençai à desesperer !
Le problème (ou alors j'ai raté quelque chose ?), c'est qu'en passant
par une queue, je bloque mon thread A pour qu'il puisse le lire, je ne
me trompe pas ?
Cordialement,
Adrien
Bonjour,
J'ai un programme qui écoute sur port via IO::Socket.
Lorsqu'un nouveau client arrive, il lance un thread dans lequel il
communique avec le client.
Mon problème est le suivant. J'ai deux clients qui se connectent. Un
client A et un client B. Deux threads (A et B) sont donc crées.
J'ai un hash qui est partagé entre les threads qui contient la liste
des clients.
Dedans, j'aimerai stocker le handle retourné par $server->accept().
Afin que le client B puisse envoyer des datas au client A via
$hash{"clientA"}{"socket"}.
Or ça ne marche pas...
Lorsque que dans le thread je copie le socket dans mon tableau de hash,
j'ai l'erreur :
thread failed to start: Invalid value for shared scalar at ./main.pl
line 175, <GEN2> line 12.
Ce n'est pas faute d'avoir cherché, mais je ne trouve pas de solution :-/
Si quelqu'un pouvait m'eclairer...
Ton thread B ecrit dans la file et le thread A lit le message passe pour l'envoyer dans sa socket.
Merci pour ta réponse :) Je commençai à desesperer ! Le problème (ou alors j'ai raté quelque chose ?), c'est qu'en passant par une queue, je bloque mon thread A pour qu'il puisse le lire, je ne me trompe pas ?
Cordialement, Adrien
Bonjour,
J'ai un programme qui écoute sur port via IO::Socket. Lorsqu'un nouveau client arrive, il lance un thread dans lequel il communique avec le client.
Mon problème est le suivant. J'ai deux clients qui se connectent. Un client A et un client B. Deux threads (A et B) sont donc crées.
J'ai un hash qui est partagé entre les threads qui contient la liste des clients. Dedans, j'aimerai stocker le handle retourné par $server->accept(). Afin que le client B puisse envoyer des datas au client A via $hash{"clientA"}{"socket"}. Or ça ne marche pas... Lorsque que dans le thread je copie le socket dans mon tableau de hash, j'ai l'erreur : thread failed to start: Invalid value for shared scalar at ./main.pl line 175, <GEN2> line 12.
Ce n'est pas faute d'avoir cherché, mais je ne trouve pas de solution :-/ Si quelqu'un pouvait m'eclairer...
Adrien
Scetbon Cyril
exact !!! Rien ne t'empeches d'utiliser une variable partagee pour signaler qu'un message a ete place dans la file.
Tu peux utiliser une file :
perldoc Thread::Queue
Ton thread B ecrit dans la file et le thread A lit le message passe pour l'envoyer dans sa socket.
Merci pour ta réponse :) Je commençai à desesperer ! Le problème (ou alors j'ai raté quelque chose ?), c'est qu'en passant par une queue, je bloque mon thread A pour qu'il puisse le lire, je ne me trompe pas ?
Cordialement, Adrien
Bonjour,
J'ai un programme qui écoute sur port via IO::Socket. Lorsqu'un nouveau client arrive, il lance un thread dans lequel il communique avec le client.
Mon problème est le suivant. J'ai deux clients qui se connectent. Un client A et un client B. Deux threads (A et B) sont donc crées.
J'ai un hash qui est partagé entre les threads qui contient la liste des clients. Dedans, j'aimerai stocker le handle retourné par $server->accept(). Afin que le client B puisse envoyer des datas au client A via $hash{"clientA"}{"socket"}. Or ça ne marche pas... Lorsque que dans le thread je copie le socket dans mon tableau de hash, j'ai l'erreur : thread failed to start: Invalid value for shared scalar at ./main.pl line 175, <GEN2> line 12.
Ce n'est pas faute d'avoir cherché, mais je ne trouve pas de solution :-/ Si quelqu'un pouvait m'eclairer...
Adrien
exact !!!
Rien ne t'empeches d'utiliser une variable partagee pour signaler qu'un
message a ete place dans la file.
Tu peux utiliser une file :
perldoc Thread::Queue
Ton thread B ecrit dans la file et le thread A lit le message passe
pour l'envoyer dans sa socket.
Merci pour ta réponse :) Je commençai à desesperer !
Le problème (ou alors j'ai raté quelque chose ?), c'est qu'en passant
par une queue, je bloque mon thread A pour qu'il puisse le lire, je ne
me trompe pas ?
Cordialement,
Adrien
Bonjour,
J'ai un programme qui écoute sur port via IO::Socket.
Lorsqu'un nouveau client arrive, il lance un thread dans lequel il
communique avec le client.
Mon problème est le suivant. J'ai deux clients qui se connectent. Un
client A et un client B. Deux threads (A et B) sont donc crées.
J'ai un hash qui est partagé entre les threads qui contient la liste
des clients.
Dedans, j'aimerai stocker le handle retourné par $server->accept().
Afin que le client B puisse envoyer des datas au client A via
$hash{"clientA"}{"socket"}.
Or ça ne marche pas...
Lorsque que dans le thread je copie le socket dans mon tableau de hash,
j'ai l'erreur :
thread failed to start: Invalid value for shared scalar at ./main.pl
line 175, <GEN2> line 12.
Ce n'est pas faute d'avoir cherché, mais je ne trouve pas de
solution :-/
Si quelqu'un pouvait m'eclairer...
exact !!! Rien ne t'empeches d'utiliser une variable partagee pour signaler qu'un message a ete place dans la file.
Tu peux utiliser une file :
perldoc Thread::Queue
Ton thread B ecrit dans la file et le thread A lit le message passe pour l'envoyer dans sa socket.
Merci pour ta réponse :) Je commençai à desesperer ! Le problème (ou alors j'ai raté quelque chose ?), c'est qu'en passant par une queue, je bloque mon thread A pour qu'il puisse le lire, je ne me trompe pas ?
Cordialement, Adrien
Bonjour,
J'ai un programme qui écoute sur port via IO::Socket. Lorsqu'un nouveau client arrive, il lance un thread dans lequel il communique avec le client.
Mon problème est le suivant. J'ai deux clients qui se connectent. Un client A et un client B. Deux threads (A et B) sont donc crées.
J'ai un hash qui est partagé entre les threads qui contient la liste des clients. Dedans, j'aimerai stocker le handle retourné par $server->accept(). Afin que le client B puisse envoyer des datas au client A via $hash{"clientA"}{"socket"}. Or ça ne marche pas... Lorsque que dans le thread je copie le socket dans mon tableau de hash, j'ai l'erreur : thread failed to start: Invalid value for shared scalar at ./main.pl line 175, <GEN2> line 12.
Ce n'est pas faute d'avoir cherché, mais je ne trouve pas de solution :-/ Si quelqu'un pouvait m'eclairer...