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

C++ Discussion :

fermer proprement des socket


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 50
    Points : 60
    Points
    60
    Par défaut fermer proprement des socket
    Bonjour à tous!

    Je suis en train de développer une application client/serveur TCP/IP sous windows, et je rencontre des problèmes lors de la fermeture des connexions.

    Le serveur se connecte vers un serveur distant, échange des données, puis ferme la connexion de la manière suivante:

    - send sur le socket pour envoyer un paquet de fermeture
    - shutdown (socket, SD_SEND)
    - lecture des données éventuelles jusqu'à ce que recv retourne 0
    - appel de la fonction closesocket.

    J'utilise netstat pour voir les connexions en cours, mais il semblerait que la connexion ne soit pas fermée. Il y a en effet un TIME_WAIT pour la connexion qui aurait du être fermée. Il est à noter que cette ligne disparait au bout de 2 minutes environ.

    D'après la doc msdn, on ferme correctement une connexion en appelant successivement shutdown puis closesocket pour libérer les ressources associées au socket.

    Quelqu'un pourrait-il me faire part de son expérience?

    Quelle est la démarche que vous utilisez dans vos programmes?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 50
    Points : 60
    Points
    60
    Par défaut
    On peut en fait résumer la question de la manière suivante:

    Quelle est la bonne démarche à suivre pour fermer une connexion coté client et coté serveur?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 50
    Points : 60
    Points
    60
    Par défaut
    J'ai pu reproduire le même phénomène:

    Coté Client:
    -WSAStartup
    -socket() pour le socket client
    -connect sur l'adresse ou structure serveur
    -sur pression d'une touche, appel de la fonction shutdown en SD_SEND afin d'initialiser la déconnexion avec le serveur.
    -appel de la fonction recv(). Si recv retourne 0, on appelle closesocket sur le socket client puis appel WSACleanup().

    Coté serveur:
    -WSAStartup
    -socket() pour le socket client et serveur
    -appel bind() du socket Serveur sur le port de connexion.
    -listen() puis
    -accept(), qui retourne alors le socket client lorsque le client se connecte.
    -recv qui retournera 0 lorsque le client appelera la fonction shutdown (pression d'une touche).
    -closesocket sur le socket client et serveur.
    -WSACleanup()

    Avec netstat, on remarque qu'après l'exécution du programme, la connexion reste active pendant un certain temps.
    S'agit t-il d'une caractéristique réseau (Round Trip) ou d'un bug de ma part?

    Merci pour toutes vos remarques.

Discussions similaires

  1. Fermer proprement un thread qui gère les sockets
    Par theclem35 dans le forum Réseau
    Réponses: 1
    Dernier message: 08/04/2011, 10h59
  2. Réponses: 0
    Dernier message: 10/09/2010, 17h30
  3. [VB6] Fermer proprement des feuilles Excel
    Par BermudaIonique dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 21/04/2006, 16h05
  4. probleme de gestion de clients avec des sockets....
    Par ludvo dans le forum Réseau
    Réponses: 6
    Dernier message: 25/09/2003, 12h37
  5. utilisation des sockets sous windows
    Par Tupac dans le forum Réseau
    Réponses: 2
    Dernier message: 21/12/2002, 18h24

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