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 :

multiplexage quand tu nous tiens


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 4
    Par défaut multiplexage quand tu nous tiens
    Salut !

    Dans le cadre de mon boulot, j'utilise les sockets et je fais du multiplexage.
    Je crée mon buffer multiplexé (qui contient des entêtes et des données) et j'envoie le tout avec writev(&fd,Mux_Buffer,size) (size < IOV_MAX)

    Tout va presque bien ... sauf que sur 10 exécutions 6 fois j'ai un résultat et 4 fois j'en ai un autre.

    Je me demande donc si j'ai pas un pb avec la taille de la socket ...
    ma question : y a-t-il une taille max de données qu'on peut écrire sur une socket ?

    merci d'avance

    pour info, le code en question

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    /* Création du buffer multiplexé */
    		  pt_mess = (thePort->input->data);
    		  memcpy( &Mux_Buffer[3*IDX], &(thePort->iPort), sizeof(thePort->iPort));
    		  currentBufSize  = currentBufSize + thePort->iPort.iov_len;
    		  printf("Mux_Buffer[%d] = %d\n",3*IDX,Mux_Buffer[3*IDX]);
    		  memcpy( &Mux_Buffer[3*IDX + 1], &(thePort->iTaille), sizeof(struct iovec));
    		  currentBufSize  = currentBufSize + thePort->iTaille.iov_len;
    		  printf("Mux_Buffer[%d] = %d\n",3*IDX+1,Mux_Buffer[3*IDX+1]);
    		  memcpy( &Mux_Buffer[3*IDX + 2], pt_mess, sizeof(struct iovec));
    		  currentBufSize = currentBufSize + thePort->input->data->iov_len;
    		  printf("Mux_Buffer[%d] = %d\n",3*IDX+2,Mux_Buffer[3*IDX+2]);
     
    		  IDX++;
    Com_Sampling_Mux_Buffer_Send(&Mux_Buffer[formerIdx],(3*IDX)-formerIdx);
     
    code de  Com_Sampling_Mux_Buffer_Send
     
    void Com_Sampling_Mux_Buffer_Send(struct iovec * Mux_Buffer,int size)
    {
      struct fd_set  fd;
      struct timeval time_out;
      long           status;
      int            handle;
      int            rwrite;
     
     
      if(Mux_Buffer == NULL)
        return;
     
      if(size == 0)
        return;
     
     
      FD_ZERO(&fd);                 //!< Initialize structure
      FD_SET(descOutput, &fd);        //!< Set structure to current socket
      time_out.tv_sec  = 0;         //!< wait socket delay
      time_out.tv_usec = 0;
     
      status = select((descOutput + 1), NULL, &fd, NULL, &time_out);
     
      if(status > 0)
        {
          printf("SizeSent = %d\n",size);
          rwrite = writev(descOutput, Mux_Buffer, size);
          printf("-------- rwrite = %d---------\n",rwrite);
        }
      else
        {
          perror();
        }
    }

  2. #2
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    y a-t-il une taille max de données qu'on peut écrire sur une socket ?
    Oui !
    Et cela dépend des OS.

    Le mieux est de découper dans une taille prédéfini ton buffer et faire des envoies répétitifs

    ex:
    Tailles des données à envoyer 456
    On dit que la taille du buffer est de 200

    Donc 3 envoies
    200
    200
    56
    Ce n'est qu'un exemple et les chiffres ne sont la que pour expliciter mon point de vu.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 4
    Par défaut
    pas si évident que cela d'envoyer une taille fixe.

    Mon Mux_Buffer est un constitué d'une grande quantité de triplets
    1.Taille d'un port (tjours 2octets dans mon prog)
    2.Taille du message qui va suivre (tjours 2octets dans mon prog)
    3.Message en lui-même (de taille variable) que je ne peux pas diviser en plusieurs messages

    ces triplets sont en grands nombre

    et je fais un writev(&fd, &Mux_Buffer[1], taille (tjours un multiple de 3) )

    ...
    donc envoyer une taille X fixe à chaque fois m'est impossible

    d'autres idées ...svp ??

  4. #4
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    3.Message en lui-même (de taille variable) que je ne peux pas diviser en plusieurs messages

    Pourquoi cela gêne ?

    Tu peux réécrire une couche de transport de haut niveau qui indique le nombre de structures que tu vas passer disons 20 avec une taille totale de 456 comme tout à l'heure.

    Dans ton socket, tu indiques la taille totale des données, ensuite le nombre de structures, ensuite les données.

    Avant envoie tu bufferises tout comme avant dans ton buffer de taille x (qui est variables)
    Et ensuite tu découpes par paquet de 200 le tout
    Tu reconstitues dans un buffer de taille X sur le client (réalloué pour tenir comptes de la taille des données envoyées, grâce à la taille totale des données qui est envoyé en entête du socket)

    Toutes les valeurs données étant à titre d’exemple.

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 44
    Par défaut langage
    Mon cher fabrizzio,
    tu dis que du fait du multiplexage et tout le tralala,il te serais 20 fois plus facile de programmer en ABEL-HDL qu'en langage C,crois moi!!!

  6. #6
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    il te serais 20 fois plus facile de programmer en ABEL-HDL qu'en langage C
    C'est quoi ça ???

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 4
    Par défaut
    Citation Envoyé par mehdi.berra
    Mon cher fabrizzio,
    tu dis que du fait du multiplexage et tout le tralala,il te serais 20 fois plus facile de programmer en ABEL-HDL qu'en langage C,crois moi!!!
    sauf que je suis en entreprise et que le langage c'est pas vraiment un choix,
    enfin pas le mien en tous les cas !
    Donc ce sera en C

  8. #8
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 44
    Par défaut oulala
    Mais c'est tout a fait dommage mon tres cher
    je suis navré pour vous,je dirai meme consterner

  9. #9
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Citation Envoyé par mehdi.berra
    Mon cher fabrizzio,
    tu dis que du fait du multiplexage et tout le tralala,il te serais 20 fois plus facile de programmer en ABEL-HDL qu'en langage C,crois moi!!!
    Si c'est cela, je ne vois pas en quoi cela aurait pu l'aider d'écrire en langage de haut niveau pour des circuits électroniques ??, j'ai peut être raté un passage...

  10. #10
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    C'est vrai que je ne vois pas non plus en quoi ça serait mieux que le C...

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

Discussions similaires

  1. [AJAX] Ajax quand tu nous tiens
    Par Florent08800 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/08/2007, 21h38
  2. [FRAME] Quand tu nous tiens
    Par hisy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 07/07/2006, 08h27
  3. [Sessions] Session quand tu nous tiens
    Par arti2004 dans le forum Langage
    Réponses: 10
    Dernier message: 27/05/2006, 19h19
  4. Regex quand tu nous tiens !!!
    Par calimero642 dans le forum Langage
    Réponses: 9
    Dernier message: 22/03/2006, 14h33
  5. [object HTMLSelectElement] IE quand tu nous tiens
    Par NeHuS dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/03/2006, 08h26

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