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 :

Timeout pour socket UDP


Sujet :

C++

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2009
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2009
    Messages : 114
    Points : 73
    Points
    73
    Par défaut Timeout pour socket UDP
    bonjour ,

    j'utilise une socket UDP . Cela fonctionne bien . Jai un problème au niveau du timeout .
    je n'arrive pas à le faire correctement fonctionner . Donc si pas de réponse du serveur , la fonction send bloque complètement .

    J'ai regardé plein de FAQ et forum .
    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
    fd_set fds ;
    struct timeval tv ;
    tv.tv_sec = 5 ;
    tv.tv_usec = 0;
    // Set up the file descriptor set.
    FD_ZERO(&fds) ;
    FD_SET(id_socket, &fds) ;
    // Set up the struct timeval for the timeout.
    int erreur_timeout= select ( id_socket, &fds, NULL, NULL, &tv )  ;
    erreur=WSAStartup(MAKEWORD(2,2),&initialisation_win32);
    id_socket=socket(AF_INET,SOCK_DGRAM,0);
    serveur_snmp.sin_family=AF_INET; // Indiquez l'utilisation d'IPV4
    serveur_snmp.sin_addr.s_addr=inet_addr(Hostname); // Indiquez l'adresse IP de votre serveur
    serveur_snmp.sin_port=htons(port); // Port TCP  à destination du serveur
     
    if (erreur_timeout < 1 )
    	{
    	 ShowMessage("Pas de réponse de l'équipement ou erreur comunication !");
     
       }
    la fonction select renvoie toujours -1 .

    Je recherche doc ou bout de code

    merci par avance

  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
    L'emplacement de WSAStartup est étrange.

    Ok select retourne -1, mais as-tu fait un GetLastError pour savoir quelle est la réelle erreur ?

    Je ne vois pas la partie de code qui créer la socket, je suppose que ça se passe bien.

  3. #3
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Heu, il me semble que l'UDP est un mode non connecté, et que par conséquent l'envoi de données en UDP n'est même pas censé regarder si le serveur répond ou pas... donc si tu attends, et ben, tu risques d'attendre ad vitam eternam.

    Après je dis peut être une connerie.

    Edit : Je lis "TCP" dans les commentaires de ton code. Alors UDP ou TCP ?
    Find me on github

  4. #4
    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
    Oups j'avais pas vu !!!

    il y a bien l'init de la socket, mais après le select, là c'est pas logique du tout. Tu testes une socket qui n'est pas créée, donc c'est clair, le select est dans les choux.

    Regarde ce cours en C qui est très intéressant : http://broux.developpez.com/articles/c/sockets/

  5. #5
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2009
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2009
    Messages : 114
    Points : 73
    Points
    73
    Par défaut
    j'avais mis ces déclarations en tête

    WSADATA initialisation_win32;

    SOCKET id_socket; // Identifiant de la socket
    SOCKADDR_IN serveur_snmp;

    @+

  6. #6
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2009
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2009
    Messages : 114
    Points : 73
    Points
    73
    Par défaut
    G compris mon erreur .

    La fonction Select fait une pause system jusqu’à détection de changement sur un descriptif en argument .
    Tout simplement .....

    Donc il faut conditionner la réception des datas UDP avec un résultat positif de ce test .

    int erreur_timeout= select ( id_socket, &fds, NULL, NULL, &tv ) ;

    if (erreur_timeout > 0)
    { OK }

    merci à tous

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

Discussions similaires

  1. timeout pour socket en .NET
    Par toutounesan dans le forum VB.NET
    Réponses: 0
    Dernier message: 25/08/2011, 10h41
  2. Réponses: 1
    Dernier message: 24/03/2009, 11h37
  3. Socket : UDP ou TCP
    Par lafracas dans le forum Développement
    Réponses: 2
    Dernier message: 10/04/2006, 22h43
  4. code c pour sockets (udp vers tcp et inversement)
    Par HiT dans le forum Développement
    Réponses: 11
    Dernier message: 19/11/2005, 18h03
  5. Notion sur Socket UDP
    Par oxor3 dans le forum Développement
    Réponses: 3
    Dernier message: 05/04/2004, 00h19

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