IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

Fermer proprement un thread qui gère les sockets


Sujet :

Réseau C

  1. #1
    Membre régulier Avatar de theclem35
    Homme Profil pro
    Technicien Réseaux & Télécommunications
    Inscrit en
    Décembre 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Réseaux & Télécommunications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 148
    Points : 86
    Points
    86
    Par défaut Fermer proprement un thread qui gère les sockets
    Salut!

    J'ai un programme multifenetres et multithreads.
    Dans un thread, j'ouvre une socket afin de recevoir des données en continu. Ce thread a été créé avec MonThread = CreateThread(NULL, 0, MaFonctionSockets, &MesDonnees, 0, NULL);

    Quand l'utilisateur veut arreter l'écoute il appuie sur le bouton STOP.
    Ce qui a pour effet de faire un TerminateThread(MonThread,0);

    Le problème est que le thread était en écoute (recvfrom) sur le port lorsqu'il a été arrêté. Mais comme la fonction a été soudainement interrompue, la socket n'a pas été fermée avec closesocket(IdMonSocket);

    Je remarque donc avec netstat que mon port est toujours ouvert meme après l'arret du thread.

    Comment puis-je faire pour fermer proprement mon thread en fermant ma socket ?

    Merci!

  2. #2
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 364
    Points : 5 378
    Points
    5 378
    Par défaut
    De souvenir, il me semble que TerminateThread n'arrête pas un thread mais le tue.
    Quand tu fais CreateThread, tu dois avoir l'Id de socket. Tu devrais sauvegarder cet id pour l'utiliser pour faire un closesocket (et shutdown ?) à la place de TerminateThread.
    Et avec ta gestion d'erreur dans le thread : tu fais un break quand recv retourne -1 (en supposant que recv est dans un while(1)). Ton thread se termine tout seul.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [EDI] Cherche PHP Indenter qui gère les array sur plusieurs lignes
    Par ilalaina dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 18/03/2010, 13h27
  2. [Vb.net/ftp] Cherche classes qui gère les connexions ftp
    Par Aspic dans le forum Windows Forms
    Réponses: 0
    Dernier message: 29/11/2009, 11h03
  3. procédure pl/sql qui gére les jobs oracle
    Par younes32 dans le forum PL/SQL
    Réponses: 6
    Dernier message: 17/06/2009, 10h52
  4. Requête union avec group by qui gère les 2 requêtes.
    Par juha dans le forum Langage SQL
    Réponses: 8
    Dernier message: 22/10/2007, 09h38
  5. Programme qui gère les QCM
    Par Ora92_IDS dans le forum Langage
    Réponses: 7
    Dernier message: 03/04/2007, 17h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo