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

Auteur Sujet: Signal socket disconnected ?  (Lu 1832 fois)

0 Membres et 1 Invité sur ce sujet

NoIdea

  • Full Member
  • ***
  • Messages: 149
    • Voir le profil
Signal socket disconnected ?
« le: Mai 20, 2012, 11:27:03 am »
Bonjour à tous.
J'ai quelques problèmes avec le module réseau de la SFML.
Aujourd'hui, voici le code serveur simplifié utilisé :

while(!finished)
    {
        unsigned NbSockets=Selector.Wait();
        for (unsigned i = 0; i < NbSockets; ++i)
        {
            sf::SocketTCP Socket = Selector.GetSocketReady(i);
            if(Socket==Listener)
            {
                sf::IPAddress Address;
                sf::SocketTCP Client;
                Listener.Accept(Client,&Address);
                Selector.Add(Client);
                //Envoie des données au client
            }
            else
            {
                sf::Packet info;
                if(Socket.Receive(info)!=sf::Socket::Done) //On vérifie que le socket a bien reçu quelque chose.
                    break;
                //On traite
            }
        }
        sf::Sleep(0.1);
    }

Voici mes questions : Comment faire, sans envoyer d'informations régulières pour vérifié si le client est toujours connecté ? (Si je dois envoyer des informations régulière, je dois multithreadé mon programme client, chose faisable, mais en dernier recours).

En gros ce que je voudrais pouvoir faire :

itération sur tous les sockets dans le selector
    -si le socket n'a rien reçu de nouveau, on passe au prochain
    -si le socket est déconnecté, je traite cette information
    -si le socket a reçu quelque chose de nouveau :
         -si c'est le listener, je rajoute la nouvelle connexion et je traite l'information.
         -sinon, je traite l'information reçue.

Comment faire ceci facilement avec le module réseau de la sfml ? Dois-je me tourner vers une autre bibliothèque réseau ?

[EDIT] Il semblerait (d'après ce que je viens de lire sur le forum anglais) que je sois obligé de multithreadé mon programme client et de vérifier régulièrement s'il est toujours connecté. Serait-il possible de mettre une fonction GetStatus dans sf::Socket qui nous indique s'il est déconnecté ou non ? (cela est peut-être déjà fait dans SFML2).[/EDIT]

Y a t-il une autre bibliothèque réseau qui pourrait répondre à mes besoins beaucoup plus simplement ?
Merci à tous.
« Modifié: Mai 20, 2012, 12:36:03 pm par NoIdea »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Signal socket disconnected ?
« Réponse #1 le: Mai 20, 2012, 04:34:03 pm »
La déconnexion n'est pas notifiée par la socket bas niveau, donc ni SFML ni aucune bibliothèque ne pourra te fournir cette indication, sans essayer au préalable de faire un envoi ou une réception. Celles qui proposent cette fonctionnalité font ce que tu veux éviter en interne.
Laurent Gomila - SFML developer