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

Auteur Sujet: [sfml2][mac] Impossible d'utiliser la class TcpSelector  (Lu 3736 fois)

0 Membres et 3 Invités sur ce sujet

Canadadry

  • Hero Member
  • *****
  • Messages: 1081
    • Voir le profil
[sfml2][mac] Impossible d'utiliser la class TcpSelector
« le: Juin 24, 2012, 02:49:48 pm »
Bonjour,

   Je reçois un signal EXC_BAD_ACCESS lorsque j'essaie d'ajouter une socket a une instance de TcpSelector. voici le code complet reproduisant le bug : 

#include <SFML/Network.hpp>

int main(int argc, char **argv)
{
    sf::TcpListener listener;
    sf::SocketSelector selector;
    selector.add(listener);

    return 0;
}

je l'ai compilé avec cette ligne de commande :

g++ Main.cpp -o main -I ../../lib_C/SFML2/include -L ../../lib_C/SFML2/lib -lsfml-network-s -lsfml-system-s -g

Et voilà ce que me dis gdb lorsque je m'en sers :

gdb main
GNU gdb 6.3.50-20050815 (Apple version gdb-1752) (Sat Jan 28 03:02:46 UTC 2012)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin"...Reading symbols for shared libraries ... done

(gdb) run
Starting program: main
Reading symbols for shared libraries ++......................... done

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: 13 at address: 0x0000000000000000
0x00000001000020b5 in sf::SocketSelector::add ()
 

Je vous joint le binaire. Je tourne sur mac avec lion. J'ai récupéré une version récente de la sfml version c4c2c77.

Merci de m'avoir lu.

[attachment deleted by admin]

Hiura

  • SFML Team
  • Hero Member
  • *****
  • Messages: 4321
    • Voir le profil
    • E-mail
Re : [sfml2][mac] Impossible d'utiliser la class TcpSelector
« Réponse #1 le: Juin 24, 2012, 07:43:18 pm »
Ton socket n'est pas ouvert, ce qui n'a peu de sens au vu de la fonctionnalité du selector :
Citer
Socket selectors provide a way to wait until some data is available on a set of sockets, instead of just one.
cf doc

A noter que les bibliothèques statiques sur les UNIX ce n'est pas la meilleure solution. En principe on préfère les dylibs ou frameworks. Voir diverses discussions sur le web.
SFML / OS X developer

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [sfml2][mac] Impossible d'utiliser la class TcpSelector
« Réponse #2 le: Juin 24, 2012, 08:09:27 pm »
Citer
Ton socket n'est pas ouvert, ce qui n'a peu de sens au vu de la fonctionnalité du selector
Certes, mais je doute que ce soit la cause du plantage. On dirait plutôt un problème de bibliothèque, de configuration ou autre.

Il n'y a que ce code en particulier qui provoque une erreur ? Tu peux utiliser d'autres classes / fonctions sans problème ?
Laurent Gomila - SFML developer

Hiura

  • SFML Team
  • Hero Member
  • *****
  • Messages: 4321
    • Voir le profil
    • E-mail
Re : [sfml2][mac] Impossible d'utiliser la class TcpSelector
« Réponse #3 le: Juin 24, 2012, 08:13:56 pm »
Le code en question plante dans :
void SocketSelector::add(Socket& socket)
{
    FD_SET(socket.getHandle(), &m_impl->AllSockets);

    int size = static_cast<int>(socket.getHandle());
    if (size > m_impl->MaxSocket)
        m_impl->MaxSocket = size;
}

parce que socket.getHandle() retourne -1 et que FD_SET n'aime pas ça je suppose.
SFML / OS X developer

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [sfml2][mac] Impossible d'utiliser la class TcpSelector
« Réponse #4 le: Juin 24, 2012, 10:43:25 pm »
-1 ? Hmm, faut que j'étudie la question alors.

En fait je vais simplement ajouter un test sur la validité de la socket, ce sera mieux dans tous les cas.
Laurent Gomila - SFML developer

Canadadry

  • Hero Member
  • *****
  • Messages: 1081
    • Voir le profil
Re : [sfml2][mac] Impossible d'utiliser la class TcpSelector
« Réponse #5 le: Juin 24, 2012, 11:54:47 pm »
Oui je n'ai que ce cas. Mais en faite le truc c'est que je faisait pas attention à l'ordre entre ajouter le listener au selector et binder le listener sur un port. Je faisait un add puis un listen. 
En fait c'est surtout que je ne m'attendais pas un segfault.
Merci.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [sfml2][mac] Impossible d'utiliser la class TcpSelector
« Réponse #6 le: Juin 26, 2012, 09:54:57 pm »
Voilà c'est corrigé.
Laurent Gomila - SFML developer

Canadadry

  • Hero Member
  • *****
  • Messages: 1081
    • Voir le profil
Re : [sfml2][mac] Impossible d'utiliser la class TcpSelector
« Réponse #7 le: Juillet 31, 2012, 11:18:35 am »
Mais du coup avec ce patch si j'ajoute mon socket et que je fais un listen après. Le socket ne sera pas ajouté au sélecteur et je n'en saurais rien. En tout cas si j'ai aucune connaissance de se qu'il se passe pas à l'intérieur.