1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    août 2005
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2005
    Messages : 1 058
    Points : 448
    Points
    448

    Par défaut socket UDP inter processus

    Bonjour, je développe une toute petite application qui doit pouvoir mettre en avant les différences de performances entre send, sendto, sendfile etc...

    J'ai deux processus (fichier .C) qui tournent sur la même machine. Le premier communique avec le second au travers d'un socket UDP AF_INET (j'ai pas mis AF_UNIX car après je ferai des tests sur des machines différentes). La transmission utilise bel et bien la loopback adresse mais si j'envoie des volumes important de donnée comme par exemple 10'000'000 de trames de 4096 KB, a la réception je perds environ 0.5 % des trames... Comment est-ce possible ? ou peut se situer la perte ?

    Ci-dessous la manière très basique dont j'envoie et je réception les données pour une méthode d'envoi donnée.

    Envoi avec sendfile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(sendfile(sfd_inet_data,shm,NULL, size) == -1){
    printf("Thread_%lu - Error sendfile[shm->sockBuff] - %s - ERRNO %i\n", pthread_self(), strerror(errno), errno);
    exit(EXIT_FAILURE);
    }
    Envoi avec sendto
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    memcpy(&snd_buf,curr_addr,sizeof(snd_buf));
    if(sendto(sfd_inet_data,snd_buf,msg_len,0,(struct sockaddr*)&rd_data_addr, sizeof(struct sockaddr_in)) != msg_len){
    printf("Thread_%lu - Error sendto[] - %s - ERRNO %i\n", pthread_self(), strerror(errno), errno);
    exit(EXIT_FAILURE);
    }
    Réception toujours la même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    numBytes = recvfrom(fd, &RCV_BUFF, sizeof(RCV_BUFF), 0, NULL, NULL);
    if(numBytes == -1){
    perror("Error during recvFrom (Printhead<--SSPD(reader) [DATAS])");
    exit(EXIT_FAILURE);
    }
    Je tiens à préciser que je ne tombe jamais dans le cas d'erreur du recvfrom.

    merci a l'avance pour votre aide
    Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...

  2. #2
    Membre du Club
    Inscrit en
    octobre 2010
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : octobre 2010
    Messages : 56
    Points : 43
    Points
    43

    Par défaut

    Salut,

    Par définition, UDP ne garantie pas l'acheminement des données, il faut utiliser TCP si tu veux que les messages arrivent. L'erreur est peut-être dans un buffer qui "déborde" : comme l’émetteur n'attend pas d'accusé de réception, il envoie toutes les trames alors que le destinataire n'a pas eu le temps de les lire.

Discussions similaires

  1. Communication inter processus avec des sockets
    Par kek's dans le forum Réseau
    Réponses: 4
    Dernier message: 17/01/2011, 11h43
  2. [windows] Communication inter-processus
    Par litbos dans le forum Windows
    Réponses: 6
    Dernier message: 16/01/2007, 09h13
  3. 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
  4. communication inter-processus
    Par benoit70 dans le forum MFC
    Réponses: 1
    Dernier message: 14/04/2005, 09h55
  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