Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1726 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs

  Sockets et Linux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Sockets et Linux

n°143839
jeremy
Posté le 23-08-2002 à 13:40:01  profilanswer
 

Salut,
 
sous Linux, en C.
Soit 2 progs : prog1 et prog2
 
Prog2 écoute sur un port.
J'ai un message initial de X octets
Prog1 écrit (primitive write) sur ce port en boucle et envoie à chaque fois un buffer de 19360octets (taille que j'ai fixé), et s'arrête quand il le faut. Je fais une trace des buffers envoyés dans un fichier (buffer + taille envoyée)
 
Prog2 lit (primitive read) les buffers qu'il recoit et je fais une trace de ces buffers dans un fichier (taille lue + buffer lui-même)
 
Problème:
le fichier de trace de prog1 est correct : à chaque fois on envoit bien 19360 octets
 
par contre le fichier de trace de prog2 est faux : je lis bien à chaque fois 19360octets et le buffer est bon, sauf au bout d'un moment, je recois un buffer qui ne fait QUE 15488 octets, puis les lectures suivantes ne recoivent rien, puis je lis un buffer de 3872octets, puis ensuite tout reva bien et je relis des octets de 19360.
 
Conclusion : je perds une bonne partie du message initial ke j'avais scindé en buffer de 19360.
 
Après moultes recherches (et n'étant pas spécialement un pro de TCP/IP et ses sockets lol), qqun peut-il m'expliquer d'où çà vient ?
 
Merci !!


---------------
Savoir c'est vivre, et maintenir dans l'ignorance, c'est presque un homicide.
mood
Publicité
Posté le 23-08-2002 à 13:40:01  profilanswer
 

n°143851
jeremy
Posté le 23-08-2002 à 13:49:26  profilanswer
 

Désolé j'aurai dû poster dans Programmation :-)


---------------
Savoir c'est vivre, et maintenir dans l'ignorance, c'est presque un homicide.
n°143854
djoh
Posté le 23-08-2002 à 13:52:18  profilanswer
 

jeremy a écrit a écrit :

Désolé j'aurai dû poster dans Programmation :-)
 




 
1) oui, je pense aussi
2) write et read ont une limitation dans la taille du buffer que tu as p-t dépassé
3) si tu mets pas le code, on peut pas t'aider  :o

n°143861
Rhum
Posté le 23-08-2002 à 14:00:23  profilanswer
 

tu utilises TCP ou UDP.
 
Dans un des cas tes paquets arrives pas forcement ds l'ordre :( il me semble.....
 
mais les socket c un peut super loin pour oi


---------------
Des Stats de Running
n°143886
jeremy
Posté le 23-08-2002 à 14:18:46  profilanswer
 

Bon ben je continue ici vu ke c + réactif que dans Prog :-)
J'utilise TCP
 
Une partie de prog1 :
 
le message initial fait une taille X
je me connecte au port,
puis j'appelle plusieurs fois cette fonction envoi() avec un buffer de 19360
puis je ferme la connection
 

Code :
  1. static int envoi(char *buffer, int *taille, int *portcgi){
  2. [...]
  3.   rtwrite=write(fdsocket,buffer,*taille);
  4. [...]
  5. }


 
Une partie de prog2 :
 
avec _TAILLEMESS=19360
j'ouvre un port
je lis en boucle
j'écris dans un fichier le contenu de rtread à chaque fois qu'on recoit le buffer. J'ai toujours 19360, puis 15488, puis 3872, puis encore des 19360 puis çà se termine.
je ferme le port
 

Code :
  1. char buffer[_TAILLEMESS]=""; [...]
  2.     while(rech==NULL){
  3.       rtread=read(fdaccept,buffer,sizeof(buffer));
  4.       [...]
  5.       rech=(char *)strstr(buffer,_FINCGI);
  6.     }
  7. [...]


 
J'arrive pas à trouver cette fameuse limite de taille
 
Merci !


---------------
Savoir c'est vivre, et maintenir dans l'ignorance, c'est presque un homicide.
n°143893
Rhum
Posté le 23-08-2002 à 14:22:54  profilanswer
 

tu as essayer en le faisant bcp plus petit style 512.
pour voire comment ton prog réagis


---------------
Des Stats de Running
n°143992
R@NNIS
Tout est possible ou presque.
Posté le 23-08-2002 à 16:08:12  profilanswer
 

hum j ai l impression ke tu verifies absolument pas l etat de la socket en ecriture ou en lecture ,je me trompe ?
 
regarde du coté de "select" ca devrait t eclaircir afin de faire kkchose de bien plus fiable.
 
et jamais envoyer des megabuffers de cette facon fait a la limite plusieurs write successifs mais ecrire des paquets comme ca sans rien verifier tu n auras ke des pbs.


---------------
Mes News
n°144005
jeremy
Posté le 23-08-2002 à 16:23:33  profilanswer
 

Non je vérifie pas l'état des sockets effectivement.
Tu peux me mettre sur la voie sur la façon de procéder ? merci
et je regarde du coté de select()
 
NB : en mettant une valeur à 3872, tout se passe bien en général, cette valeur m'intrigue car c'est celle qui apparait dans les fichiers de trace
 
Merci


---------------
Savoir c'est vivre, et maintenir dans l'ignorance, c'est presque un homicide.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs

  Sockets et Linux

 

Sujets relatifs
Ça a été une belle aventure Linux, n'est ce pas ?Bi proco Linux
acceder a une parto NTFS avec une diskette de boot linux y a moyen ?Pb config linux + routeur ADSL
Changement de materiel sur LinuxLotus Domino R5 pour linux
Distrib linux pour un tout petit portable ?Drivers ATI Radeon 8500 sous Linux
Backuper un système linux complet sur un autre disque dur ?Débutant avec linux Mandrake, et qui a besoin d'aide
Plus de sujets relatifs à : Sockets et Linux


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR