Forum de la communauté SFML

Aide => Réseau => Discussion démarrée par: Samuel Proulx le Mai 12, 2012, 08:05:49 pm

Titre: [SFML 2] Méthode selector.remove(client) ne fonctionne pas correctement
Posté par: Samuel Proulx le Mai 12, 2012, 08:05:49 pm
Bonjour à tous et à toutes :)

Lorsqu'un client se déconnecte, j'utilise ceci :
cout<<"Client "<<client.getRemoteAddress()<<" disconnected"<<endl;
client.disconnect();
m_selector.remove(client);
it = m_clients.erase(it);
 

Selon moi, ce code devrait théoriquement fonctionner, mais ça ne fonctionne pas. Après quelques tentative, j'ai trouvé le problème (oui pour une fois j'ai trouvé moi-même le problème ;D) et voici ma conclusion : remove doit être appelé avant disconnect

Du coup, ce code fonctionne nickel :
cout<<"Client "<<client.getRemoteAddress()<<" disconnected"<<endl;
m_selector.remove(client);
client.disconnect();
it = m_clients.erase(it);
 

Est-ce normal/prévu que ça fonctionne ainsi ???

Merci et bonne journée !  ;)
Titre: Re : [SFML 2] Méthode selector.remove(client) ne fonctionne pas correctement
Posté par: Laurent le Mai 13, 2012, 12:17:55 pm
En effet. Après avoir appelé disconnect, la socket interne n'existe plus, elle est détruite. Donc elle n'est plus retrouvée par le sélecteur.

J'avoue que ce n'est pas hyper intuitif ;D
Titre: Re : [SFML 2] Méthode selector.remove(client) ne fonctionne pas correctement
Posté par: Samuel Proulx le Mai 13, 2012, 04:02:15 pm
D'accord hum... petite question : la socket interne (donc ce que tes classes gèrent à notre place) est détruite, mais l'instance ici (client) est une référence d'un objet qui a été instancié via TcpSocket* socket = new TcpSocket;

Je dois tout de même appeler delete *socket; afin de supprimer la socket de la mémoire ?
Titre: Re : [SFML 2] Méthode selector.remove(client) ne fonctionne pas correctement
Posté par: Laurent le Mai 13, 2012, 05:30:18 pm
Tout ce qui est alloué avec new doit être détruit avec delete. Peu importe ce que j'y fais dedans.