Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [SFML 2] Méthode selector.remove(client) ne fonctionne pas correctement  (Lu 2980 fois)

0 Membres et 1 Invité sur ce sujet

Samuel Proulx

  • Full Member
  • ***
  • Messages: 118
    • Voir le profil
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 !  ;)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
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
« Modifié: Mai 13, 2012, 05:29:40 pm par Laurent »
Laurent Gomila - SFML developer

Samuel Proulx

  • Full Member
  • ***
  • Messages: 118
    • Voir le profil
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 ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Tout ce qui est alloué avec new doit être détruit avec delete. Peu importe ce que j'y fais dedans.
Laurent Gomila - SFML developer