Bonsoir,
Je suis en train de coder un clone de client et de serveur irc.
Je m'appuie de loin sur le protocole irc.
Le serveur accepte la connection et crée un nouveau processus pour chaque client.
Pour gérer les clients le serveur et tous les fils partage un segment de memoire contenant un tableau de struct user
voila la struct :
Le client se connecte au serveur, crée un nouveau processus pour lire sur le socket et ecrit via le pere.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 typedef struct { int sock; char nick[MAXNAME]; struct sockaddr_in addr; socklen_t addr_t; int nbChan; char chan[MAXCHAN][MAXNAME]; } user;
Tout marche bien sauf dans le scénario suivant :
client1 se connecte
client2 se connecte
client3 se connecte
// dans cette phase peut importe l'ordre de connexion au channel
client2 rejoin le channel #chan
client3 rejoin le channel #chan
client1 rejoin le channel #chan
client1 envoi un message sur le channel. Le seul client a voir le message est client1
client3 envoi un message sur le channel tous les clients le recoivent
client2 envoi un message sur le channel les client1 et 2 voient le message
Lors de l'envoi du message du client1 vers les clients 2 et 3 je recoi une erreur du sendto (ou du send) de type EBADF
Le descripteur de socket passé en paramètre est bon il correspond bien a celui des différent clients que je veux contacter.
J'espère avoir été le plus clair possible si ce n'est pas le cas demandez moi
Merci d'avance pour vos réponses et pour votre compréhension si le problème vous semble ridicule :p
Partager