Bonjour
Je développe un applicatif basé sur un serveur et des clients, le tout communiquant par sockets.
J'ai donc développé un serveur de sockets sur lequel peuvent se connecter plusieurs clients simutanément.
Sur chaque client, il y a donc une socket d'ouverte sur le serveur. Il y a également un thread secondaire (procedure threadEcoute lancée en automatique) qui boucle en attente des messages du serveur (j'ai entre autre dans la boucle un "SocketLit("SocketClient", Faux, 70)"). Si un message arrive du serveur, je lance à partir de threadEcoute() une procédure threadTraiteMessage(leMessage) dans un thread qui va traiter le message. Jusque là, tout est normal et conforme à ce qui est préconisé dans le doc Windev.
Si le client reçoit un message de deconnexion du serveur (par exemple le serveur va être arrêté et demande à tous les clients connectés de se déconnecter proprement de leur côté), alors côté client je ferme la socket "SocketFerme("SocketClient")" . Or la fermeture me génère souvent une erreur disant que la socket "SocketClient" est utilisée par un autre thread. A priori, cela se produit lorsque la fermeture de la socket intervient alors que le thread d'écoute est en train de lire cette même socket.
Est-ce que quelqu'un a déjà été confronté à ce problème et quelle solution adoptée ? Comment faire pour éviter cela ?
J'espère avoir été assez clair et vous en remercie d'avance.
Partager