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 :

recvfrom bloquant ou pas?


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2008
    Messages : 308
    Par défaut recvfrom bloquant ou pas?
    bonjour,

    j'ai un problème avec recvfrom, j'aimerai qu'il soit bloquant alors qu'il ne l'est pas, il se contente de renvoyer -1.

    voici la commande j'utilise:
    recvfrom(s, buffer, sizeof(buffer) - 1, 0, (SOCKADDR *)&e, &esize);
    il me semble que le 0 signifie qu'il doit être bloquant, non?

    si je me trompe pas, alors pourquoi ça ne bloque pas?
    le problème est t'il ailleurs?

    merci

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par bebaijhi Voir le message
    j'ai un problème avec recvfrom, j'aimerai qu'il soit bloquant alors qu'il ne l'est pas, il se contente de renvoyer -1.
    Si il renvoit -1, c'est qu'il y a une erreur.

    Montre tout ton code.

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2008
    Messages : 308
    Par défaut
    main.cpp:
    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
    #include <stdio.h>
    #include <winsock2.h>
    #include "socket.h"
     
    int main()
    {
        SOCKET s;
        if(createSocket(s)){
     
                    SOCKADDR_IN e; /* L'expediteur (d'ou vient le message ...) */
     
                    int n, esize;
                    char buffer[100];
     
                    esize = sizeof(e);  
     
                    while(1){              
                                           n = recvfrom(s, buffer, sizeof(buffer) - 1, 0, (SOCKADDR *)&e, &esize);
                                           printf("%d\n",n);
                    }
                    destroySocket(s);
        }
     
        return 0;
    }
    socket.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #ifndef DEF_socket
    #define DEF_socket
     
    #include <stdio.h>
    #include <winsock2.h>
     
    bool createSocket(SOCKET s);
    void destroySocket(SOCKET s);
     
    #endif
    socket.cpp:
    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
    #include "socket.h"
     
    bool createSocket(SOCKET s){
     
        WSADATA wsaData;
     
        if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0)return false;
     
        s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
     
        if (s == INVALID_SOCKET)return false;
     
        SOCKADDR_IN r;
                r.sin_family       = AF_INET;
                r.sin_addr.s_addr  = htonl(INADDR_ANY);
                r.sin_port         = htons(5050);
                memset(&r.sin_zero, '\0', sizeof(r.sin_zero));
     
        if (bind(s, (SOCKADDR *)&r, sizeof(r)) == SOCKET_ERROR)return false;
     
        return true;
    }
     
    void destroySocket(SOCKET s){
     
        closesocket(s);
        WSACleanup();
    }

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    createSocket renvoit si la création du socket a eu lieu mais la variable s qui contient le socket n'est jamais retournée à la fonction appelante…

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    bool createSocket(SOCKET *s)
    {
    …
    *s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
    …
    … bind(*s …
    …
    }

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2008
    Messages : 308
    Par défaut
    ouaip, erreur bête, au début la fonction renvoyai un socket et non un bool et je me suis trompé en la modifiant.

    merci.

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

Discussions similaires

  1. TcpClient bloquant qui ne bloque pas
    Par massi93 dans le forum C#
    Réponses: 3
    Dernier message: 01/06/2009, 22h58
  2. Socket udp, recvfrom non bloquant
    Par yellowboy dans le forum C++
    Réponses: 0
    Dernier message: 26/05/2008, 22h10
  3. recvfrom qui ne bloque pas ?
    Par innosang dans le forum Réseau
    Réponses: 1
    Dernier message: 21/06/2007, 11h11
  4. Réponses: 4
    Dernier message: 17/04/2007, 17h32

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