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 :

Socket netstat TIME_WAIT [Non suivi]


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 12
    Par défaut Socket netstat TIME_WAIT
    Bonjour,

    J'ai un petit problème de client serveur sous linux.
    Mon application est simple je souhaite envoyer un log sur le reseau tant que le client est connecté. J'ai un programme qui tourne bien sauf si c'est le serveur qui prend l'initiative de fermer la connexion.
    Je souhaite savoir comment est ce que le serveur peut fermer les sockets clientes proprement c'est à dire sans que netstat me donne un état TIME_WAIT, et donc bind qui me jette dès que je relance mon serveur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <string.h>
    #include <unistd.h>
     
    int main(void)
    {
        int Sock_srv, Sock_clt;
        int length, i;
        struct sockaddr_in Addr_srv;
        struct sockaddr Addr_clt;
     
        if((Sock_srv = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    	return(-1);
     
        bzero(&Addr_srv, sizeof(Addr_srv));
        Addr_srv.sin_family = AF_INET;
        Addr_srv.sin_addr.s_addr = INADDR_ANY;
        Addr_srv.sin_port = htons(6666);
     
        length = sizeof(Addr_srv);
        if (bind(Sock_srv,(struct sockaddr*)&Addr_srv, length) != 0)
        {
    	close(Sock_srv);
    	return(-1);
        }
     
        listen(Sock_srv, 1);
     
        bzero (&Addr_clt, sizeof(Addr_clt));
        length = sizeof(Addr_clt);
        Sock_clt = accept(Sock_srv, &Addr_clt, (socklen_t*) &length);
     
        for(i=0; i < 20; i++)
        {
        	 if(write(Sock_clt, "123456789\r\n", strlen("123456789\r\n")) < 0)
        	     break;
        	 sleep(1);
        }
        close(Sock_clt);
        close(Sock_srv);
     
        return (0);
    }
    Merci d'avance.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    le close ne ferme pas définitivement. C'est le shutdown qui ferme définitivement...

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 12
    Par défaut
    Ok je viens bien te croire.
    J'ai modifié mon source de façon à faire un shutdown.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    shutdown(Sock_clt, SHUT_RDWR);
    shutdown(Sock_srv, SHUT_RDWR);
    close(Sock_clt);
    close(Sock_srv);
    ou
    shutdown(Sock_srv, SHUT_RDWR);
    shutdown(Sock_clt, SHUT_RDWR);
    close(Sock_clt);
    close(Sock_srv);
    ou
    shutdown(Sock_srv, SHUT_RDWR);
    close(Sock_clt);
    close(Sock_srv);
    ...
    Je ne vois toujours pas d'où ça vient.

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    est-ce que ton client détecte que la communication est coupée et du coup est-ce qu'il s'arrête ?

    C'est ce qu'il devrait faire....

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 12
    Par défaut
    Citation Envoyé par souviron34
    est-ce que ton client détecte que la communication est coupée et du coup est-ce qu'il s'arrête ?

    C'est ce qu'il devrait faire....
    J'utilise le telnet de Linux et dés que je close la socket cliente il m'affiche "Connection closed by foreign host".

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    oui mais est-ce qu'il fait lui aussi close puis shutdown ?

Discussions similaires

  1. Netstat et socket
    Par alexorcet dans le forum Réseau
    Réponses: 5
    Dernier message: 02/06/2008, 15h07
  2. Réponses: 1
    Dernier message: 09/11/2006, 02h00
  3. executer une application a distance : Sockets ? RPC ? CORBA?
    Par a_hic dans le forum Développement
    Réponses: 5
    Dernier message: 30/05/2006, 13h02
  4. Socket:Envoyer du texte d'un serveur vers tout les clients
    Par cedm78 dans le forum Web & réseau
    Réponses: 7
    Dernier message: 01/08/2002, 16h40
  5. transfert d'un fichier bitmap en socket tcp
    Par localhost dans le forum C++Builder
    Réponses: 5
    Dernier message: 29/07/2002, 00h40

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