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

  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 �m�rite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par d�faut
    Le HDL pour Hardware Description Language, dont le verilog et le VHDL sont utilis�s essentiellement sur FPGA.

    Alors juste comme cela, ce n'est pas une question de chance mais de processeur sur lequel on travaille.

    Quoique, il il y a des outils qui tendent � convertir du C en VHDL (cf catapult).

  10. #10
    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...

  11. #11
    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...

  12. #12
    Membre Expert
    Homme Profil pro
    D�v. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activit� : D�v. Java & C#
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par d�faut
    COMMENTAIRE:

    A mon humble avis, le mot multiplexage est la source de la confusion.

  13. #13
    Membre �m�rite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par d�faut
    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 ??,
    Pour moi, le VHDL n'est pas un language haut niveau mais un language de description pour la conception de circuits int�gr�s num�riques.

    Apr�s synth�tisation du langage, tout se ram�ne � l'utilisation de portes logiques, de bascules, de registres... D'ailleurs l'optimisation du code se joue dans l'utilisation de ses ressources disponibles selon le composant num�rique.

    C'est vrai que je ne vois pas non plus en quoi �a serait mieux que le C...
    C'est r�ellement deux choses diff�rentes et donc deux approches diff�rentes.
    Il est clair que g�n�rer un multiplexeur en VHDL est r�ellement tr�s simple puisqu'il suffit de d�crire le fonctionnement.

  14. #14
    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 homeostasie
    Il est clair que g�n�rer un multiplexeur en VHDL est r�ellement tr�s simple puisqu'il suffit de d�crire le fonctionnement.
    On est d'accord... mais rien � voir avec le probl�me de Fabrizzio33 et ces sockets...

  15. #15
    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
    j'ai avanc� un poil

    perror() me renvoie : connection refused
    alors qu'errno vaut 61 : ENODATA

    voil� o� j'en suis

    j'ai v�rifi� que memcpy renvoyait bien ce qu'il fallait, c ok

    traces obtenues
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    ++++++++++++++++++++++
    TAILLE MESSAGE = 24
    NEXT CurrentBufSize = 440
    &(thePort->iPort) = 1074781640
    &(thePort->iTaille) = 1074781656
    CurrentBufSize = 440
    +++++++++++++++++++++++
    TAILLE MESSAGE = 124
    NEXT CurrentBufSize = 568
    ======= OVER SIZE SOCKET  => MULTIPLEX BUFFER TO SEND =======
    SizeSent = 48
    -------- rwrite = 628---------
    formerIdx = 339  nbSentItems= 48
    &(thePort->iPort) = 1074781800
    &(thePort->iTaille) = 1074781816
    CurrentBufSize = 128
    +++++++++++++++++++++++
    TAILLE MESSAGE = 24
    NEXT CurrentBufSize = 156
    &(thePort->iPort) = 1074781960
    &(thePort->iTaille) = 1074781976
    CurrentBufSize = 156
    +++++++++++++++++++++++
    TAILLE MESSAGE = 12
    NEXT CurrentBufSize = 172
    &(thePort->iPort) = 1074782120
    &(thePort->iTaille) = 1074782136
    CurrentBufSize = 172
    +++++++++++++++++++++++
    TAILLE MESSAGE = 12
    NEXT CurrentBufSize = 188
    &(thePort->iPort) = 1074782280
    &(thePort->iTaille) = 1074782296
    CurrentBufSize = 188
    +++++++++++++++++++++++
    TAILLE MESSAGE = 12
    NEXT CurrentBufSize = 204
    &(thePort->iPort) = 1074782440
    &(thePort->iTaille) = 1074782456
    CurrentBufSize = 204
    +++++++++++++++++++++++
    TAILLE MESSAGE = 24
    NEXT CurrentBufSize = 232
    &(thePort->iPort) = 1074782600
    &(thePort->iTaille) = 1074782616
    CurrentBufSize = 232
    +++++++++++++++++++++++
    TAILLE MESSAGE = 44
    NEXT CurrentBufSize = 280
    &(thePort->iPort) = 1074782760
    &(thePort->iTaille) = 1074782776
    CurrentBufSize = 280
    +++++++++++++++++++++++
    TAILLE MESSAGE = 12
    NEXT CurrentBufSize = 296
    &(thePort->iPort) = 1074782920
    &(thePort->iTaille) = 1074782936
    CurrentBufSize = 296
    +++++++++++++++++++++++
    TAILLE MESSAGE = 76
    NEXT CurrentBufSize = 376
    &(thePort->iPort) = 1074783080
    &(thePort->iTaille) = 1074783096
    CurrentBufSize = 376
    +++++++++++++++++++++++
    TAILLE MESSAGE = 16
    NEXT CurrentBufSize = 396
    &(thePort->iPort) = 1074783240
    &(thePort->iTaille) = 1074783256
    CurrentBufSize = 396
    +++++++++++++++++++++++
    TAILLE MESSAGE = 32
    NEXT CurrentBufSize = 432
    &(thePort->iPort) = 1074783400
    &(thePort->iTaille) = 1074783416
    CurrentBufSize = 432
    +++++++++++++++++++++++
    TAILLE MESSAGE = 24
    NEXT CurrentBufSize = 460
    &(thePort->iPort) = 1074783560
    &(thePort->iTaille) = 1074783576
    CurrentBufSize = 460
    +++++++++++++++++++++++
    TAILLE MESSAGE = 20
    NEXT CurrentBufSize = 484
    &(thePort->iPort) = 1074783720
    &(thePort->iTaille) = 1074783736
    CurrentBufSize = 484
    +++++++++++++++++++++++
    TAILLE MESSAGE = 12
    NEXT CurrentBufSize = 500
    &(thePort->iPort) = 1074783880
    &(thePort->iTaille) = 1074783896
    CurrentBufSize = 500
    +++++++++++++++++++++++
    TAILLE MESSAGE = 12
    NEXT CurrentBufSize = 516
    ======= OVER SIZE SOCKET  => MULTIPLEX BUFFER TO SEND =======
    SizeSent = 42
    -------- rwrite = -1---------
    erreur writev: Connection refused
     errno = 61
    formerIdx = 387  nbSentItems= 42
    &(thePort->iPort) = 1074784040
    &(thePort->iTaille) = 1074784056
    CurrentBufSize = 16
    du coup, je comprends tjours pas ...


    En gros, certains writev fonctionnent et d'autres non
    la taille limit� que j'ai fix� pour le writev est 512
    si currentBufSize<IOV_MAX/2, on continue,
    sinon, on envoie le Mux_Buffer et writev renvoie le nb d'octects �crits

    voil� l'histoire,

    si vous avez des propositions ...

+ 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