[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [linux] [OT] Programmation: petites questions...



OK, je comprends mieux.
Donc, chaque thread a une socket différente vers un serveur web (tiens, au
passage, ce sont bien des threads ou ce sont des process ?).

Si j'ai bien compris, ce que tu fais se résume à

do {

  lire_socket();
} while socketNotEmpty && bufferNotFull

TraiteBuffer(); /* Sauve sur disque, transmet aux clients, que sais-je... ?
*/

Si tu ne mets pas de usleep après lire_socket(), parfois ta page est
incomplète.
A mon avis, ce qui se passe c'est que sans le usleep, tu vides trop vite le
buffer de la socket. En effet, quand le serveur web transmet des données à
ton proxy, ces données sont stockées par l'OS dans un buffer. La
transmission des données du serveur web à ton proxy étant plus lente que la
lecture d'un buffer local, il se vide. Tu quittes alors ta boucle en n'ayant
reçu qu'un message incomplet.
Avec le usleep, plus de données ont eu le temps d'être transmises.

Il faut donc que tu quittes ta boucle quand le transfert est fini, pas quand
le buffer est vide.
Est-ce le serveur qui décide de fermer la connexion ?
Si oui, tu quittes la boucle qd recv() retourne -1.

A+,

Christophe




> -----Original Message-----
> From: Benoit Joseph [mailto:benoit.joseph@teledisnet.be]
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
>
> Non en fait je contacte un serveur web et je rapatrie les données qu'il
> m'envoie. (html, images, applet, etc...)
> Et je peux avoir un nombre indéterminé de threads qui ouvrent des
> connections une connection vers un serveur web.
> Normalement, la zone mémoire n'est pas partagée entre les threads.
> L'usage de sémaphores est impossible vu que je n'ai pas accès aux
> serveurs webs et puis ce serait ultra inefficace... ;-)
>
> Voilà le symptôme mieux décrit:
>
> avec usleep et la valeur qu'il prend, pas de problème, je reçois bien
> les pages en entier (sauf petit problème localisé)
>
> sans usleep, les pages qui passaient avant ne s'affiche plus en entier.
> Souvent je n'ai que le début. Par exemple pour une image, je n'ai que
> la moitié de l'image. Comme si on recevait la fin de connection du
> proxy/server et que l'on envoyait la réponse au client web.
>
> Le seul paramètre qui change, c'est le usleep. J'aimerais donc savoir
> si j'ai loupé un truc quelque part au niveau gestion de la mémoire et
> savoir si il y a des délais au niveau de l'allocation/utilisation...
>
> Merci
>
> Ben
>
>



[ Soyez précis dans vos sujets svp afin de déterminer directement  ]
[ le type de demande...                                            ]
[ Pour vous (dés)inscrire, aller sur http://unixtech.be/ml.php     ]
[ Archives de la mailing list: http://archives.unixtech.be/linux/  ]
[ http://unixtech.be              Contact: listmaster@unixtech.be  ]