Forum de la communauté SFML

Aide => Réseau => Discussion démarrée par: NoIdea le Mai 20, 2012, 11:27:03 am

Titre: Signal socket disconnected ?
Posté par: NoIdea 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.
Titre: Re : Signal socket disconnected ?
Posté par: Laurent 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.