Partage
  • Partager sur Facebook
  • Partager sur Twitter

socket bloquante

asynchrone ?

Anonyme
    9 octobre 2007 à 19:23:53

    Boujour,
    Je developpe un programme composé de deux parties (threads).
    La première écoute les commandes tapez au clavier et l'autre ecoute une socket.C'est la que le poblème se pose: lorsque je tape la commande exit (qui doit fermer le programme) et bien le 1ere thread se ferme mais le second non car c'est une socket bloquante elle attend donc une nouvelle connection pour ce fermer.Je pense que je doit utiliser les sockets asynchrones, mais je ne sais pas comment créer un socket de ce type...

    voila mon code:
    1. listensocket = socket(AF_INET,SOCK_STREAM,0);
    2.     if(listensocket < 0)
    3.         {
    4.             exit(1);
    5.         }
    6.     else
    7.         {
    8.             struct sockaddr_in serveraddress;
    9.             int port_ = (int) port;
    10.             int socketclient;
    11.             size_t tempo;
    12.             struct sockaddr_in clientaddress;
    13.             serveraddress.sin_family = PF_INET;
    14.             serveraddress.sin_addr.s_addr = htonl(INADDR_ANY);
    15.             serveraddress.sin_port = htons(port_);
    16.             if (bind(listensocket, (struct sockaddr *) &serveraddress,sizeof(serveraddress)) < 0)
    17.                 {
    18.                     exit(1);
    19.                 }
    20.             listen(listensocket,3);
    21.             while(((socketclient = accept(listensocket,(struct sockaddr *) &clientaddress,&tempo)) < 0) || test == 0)
    22.                 {
    23.                 }
    24.             close(listensocket);
    25. }

    si quelqu'un a une idée ou bien sait ou trouver de la doc je suis preneur.
    Merci d'avance

    PS: Le programme sera executé sous linux.
    • Partager sur Facebook
    • Partager sur Twitter
      9 octobre 2007 à 20:02:37

      Le plus simple ne serait il pas de mettre un booléen dans une variable qui serait transmis d'un threads à l'autre ?

      du genre une structure avec un bool mis à true et lorsqu'il passe à false il éteint le threads

      sinon je sais aps ce que c'est que des sockets asychrone dsl

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        9 octobre 2007 à 20:17:50

        Merci de m'avoir repondu

        oui c'est ce que j'ai fait mais lorsque que le programme arrive à la fonction accept() le programme ce bloque et ne ce debloque que quand une connection arrive.
        Le probleme c'est que la fonction accept() est bloquante et je voudrait quel ne le soit pas.
        • Partager sur Facebook
        • Partager sur Twitter
          9 octobre 2007 à 20:35:38

          http://msdn2.microsoft.com/en-us/library/ms740476.aspx

          la fonction setsockopt avec winsock2 permet de d'ajouter une options SO_RCVTIMEO qui permet de bloquer le socket pour un nombre fini de millisecondes... après il sort avec ERREUR

          on a qu'à repasser par le while et véfier si le serveur est encore en vie et recommencer le accept... sinon : "Kill the damn thread!"

          tout ca ce fait effectivement avec un booléen dans une structure passée aux threads!
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            10 octobre 2007 à 13:46:05

            Oui mais sous linux je n'utilise pas winsock2.
            • Partager sur Facebook
            • Partager sur Twitter

            socket bloquante

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown