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 :

[C -socket] cas particulier select()


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    82
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 82
    Par défaut [C -socket] cas particulier select()
    bonjour a tous j'ai un cas particulier de l'utilisation de select() avec une socket et j'aurais aimé avoir de l'aide

    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
     
     
                    fd_set readfs
                    struct timeval tv;   // on defini la struct
     
     
              // creation du socket 
     
    		WSADATA WSAData;
    		SOCKADDR_IN configsock;
                    SOCKET monsock;
     
                     monsock = socket(AF_INET,SOCK_STREAM,0);
     
           ....... 	configsock.sin_addr.s_addr.....
     
               //connection de la socket
                    connect(monsock , (SOCKADDR*)&configsock, sizeof(configsock)); 
     
            .........    .............
     
                         FD_ZERO(&readfs);
                         FD_SET(monsock, &readfs);
     
    				tv.tv_sec = 5;          
    				tv.tv_usec = 0;
     
     
              // debut du while  
     
    while( InternetCheckConnection("http://www.google.fr", FLAG_ICC_FORCE_CONNECTION, 0) != FALSE ) 
    				{
     
             ...........................
     
    					if( select( monsock + 1, &readfs, NULL, NULL, &tv) == -1 )
    					{
    						printf("\n arreté la socket avec un TIME-OUT \n"); 
    						closesocket(monsock);
    					}
     
                                    }

    voila un bout de code vite fait recopié , mon soucis c 'est que le timeout du select() n'a aucun effet sur la connection du socket et je n'arrive pas a determiné un temps de timeout.
    je voudrai reussir a dire = If mon socket ne recoit rien pendant 5minutes le deconnecté .


    merci de votre compréhension .

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Serbie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 42
    Par défaut
    Salut, tu peux essayer avec "keep alive" option, regarde http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx et http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html pour les explications.

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    82
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 82
    Par défaut
    salut et merci pour ton aide .

    j'ai essayé deja avec le Keep Alive mais je sais pas si je le fais mal mais il passe pas non plus aucune reactions .

    tu peux me donner un exemple avec le keep alive ?

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    RETURN VALUE
    On success, select() and pselect() return the number of file descrip‐
    tors contained in the three returned descriptor sets (that is, the
    total number of bits that are set in readfds, writefds, exceptfds)
    which may be zero if the timeout expires before anything interesting
    happens
    . On error, -1 is returned, and errno is set appropriately; the
    sets and timeout become undefined, so do not rely on their contents
    after an error.
    Autrement dit select() ne retourne pas -1 quand le timeout expire mais 0, pour signifier qu'aucun des fd n'est prêt.

  5. #5
    Membre confirmé
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    82
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 82
    Par défaut
    matafan meme si je met au select() == 0 j'ai pas de reactions il ne coupe pas la socket si le delai est écoulé .

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Serbie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 42
    Par défaut
    Je t'ai mis un exemple de client pour Windows qui démontre timeout avec select(). Le serveur que j'ai utilisé est pour Linux (j'en ai marre d'ecrire version pour Windows). Le serveur envoie "Hello World" 10 secondes après de connection. Ce code attaché marche chez moi.
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Effacer (cas particulier) d'un champ de formulaire
    Par frog43 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 17/05/2006, 19h29
  2. Réponses: 27
    Dernier message: 12/01/2006, 12h04
  3. cas particulier agaçant
    Par devdébuto dans le forum C
    Réponses: 17
    Dernier message: 14/12/2005, 00h45
  4. Enregistrement courant après refresh [cas particulier]
    Par say dans le forum Bases de données
    Réponses: 8
    Dernier message: 02/08/2005, 16h59

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