Bonjour,
Pour mon programme serveur/client, j'utilise les tcp::socket.
J'ai une classe connector qui attend la connexion d'un client, et lorsque la connexion est faite, le connector crée la session et lui passe un pointeur vers ma socket (je n'utilise pas les smart pointeur, c'est voulu).
Mon problème c'est que j'ai deux cas où je dois détruire la socket :
- Soit le client se déconnecte de lui-même et dans ce cas pas de soucis je peux la delete sans erreur
- Soit c'est le connector, qui contient l'io_service avec lequel est créée la socket, qui est détruit et cela déconnecte mon client. Ça me permet de couper mon programme en déconnectant proprement tous les clients connectés.
Et c'est précisément dans mon 2ème cas que mon problème arrive. En effet, si je delete la socket, le programme crash car elle a déjà été fermée (je ne sais si j'emploie les bons mots) lorsque le connector a été détruit.
Il me faut un moyen de tester si la socket est encore connectée ou quelque chose du genre, mais dans tous les cas ça ne m'arrange pas parce que je ne peux pas libérer la mémoire ...
J'ai tenté d'inverser le processus et de détruire le connector après la déconnexion des clients mais j'ai alors une runtime error à sa destruction ...
Si je ne libère pas la mémoire ça risque de s'accumuler lorsque je ferais un redémarrage du serveur, mais je la libère, je fais tout planter ...
Merci d'avance pour vos conseils/remarques.
Partager