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 UDP, problème de bind changement de port destination.


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 81
    Par défaut socket UDP, problème de bind changement de port destination.
    Bonjour à tous,

    J'ai écrit un module en C que je réutilise dans un projet, où je déclare 3 variables statiques (la socket et les deux structures sockaddr_in client et serveur) qui ne peuvent être modifiées par un module exterieur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    static unsigned int fd;
    static struct sockaddr_in local_addr;
    static struct sockaddr_in si_other;
     
    init()
    wsendto(char * buffer, int len)
    wrevfrom(char * buffer, int len)
    La fonction init() initialise les 3 variables statiques (appel de socket(), bind()) et les fonctions wsendto() et wrecfrom() sont des wrappers pour les fonctions sendto et recvfrom.

    Je recontre un souci avec ces fonctions wrapper : les premiers appels à ces fonctions gardent bien les paramètres initialisés dans init(), mais au bout de quelques appels, le port de destination change et je perds donc la communication avec l'application distante.
    D'où ma question : une fois l'appel à bind() effectué, les informations définies dans init() ne devraient elles pas ne plus être modifiées ? Quelles pourraient être les raisons d'une modification du port destination, sachant que je ne fais plus de modifications sur la socket où les structures une fois l'appel à bind() effectué ?


    Merci à vous.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 81
    Par défaut
    résolu !
    J'avais complètement oublié que l'appel de recvfrom() réécrivait la structure sockaddr_in fournie en paramètre avec les infos du destinateur (trop habitué au TCP). Evidemment, le fait de définir une structure sockaddr_in de destination avant de recevoir/envoyer des messages ne va pas suffire à garantir l'unicité de la communication si je reçois des messages d'autres applications sur le même port...
    Comme je ne communique qu'avec une machine, j'ai pu corriger ce problème en appelant la fonction connect(), qui, d'après les page de man, restreint la communication sur la socket avec un destinataire/eur unique.

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

Discussions similaires

  1. [Généralités] Socket UDP port source
    Par loic_sp83 dans le forum WinDev
    Réponses: 4
    Dernier message: 03/08/2010, 00h34
  2. Réponses: 2
    Dernier message: 17/05/2010, 15h57
  3. Problème avec socket UDP
    Par Prayeriz dans le forum Développement
    Réponses: 4
    Dernier message: 12/01/2009, 08h18
  4. [Socket RAW] Problème entête UDP
    Par Flo0r dans le forum Réseau
    Réponses: 4
    Dernier message: 30/12/2008, 15h41
  5. Socket UDP: écoute sur un seul port?
    Par toninlg dans le forum C#
    Réponses: 3
    Dernier message: 04/12/2007, 08h12

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