[Perl] probleme de socket bloquant

probleme de socket bloquant [Perl] - Perl - Programmation

Marsh Posté le 24-07-2004 à 15:22:35    


Bonjour,
 
J'ai un probleme au niveau d'un socket en perl,
je n'arrive pas à lire les données dans le buffer
de celui-ci (via un <Socket> ) par ce que elles ne sont
pas finies par le caractere \n
 
Si qq avait une solution pour lire le buffer du socket..  
sachant que je connais exactement le nombre d'octet dans
celui-ci, et je cherche une solution qui fonctionne sous windows ;\
 
Merci à vous :))
 

Reply

Marsh Posté le 24-07-2004 à 15:22:35   

Reply

Marsh Posté le 24-07-2004 à 16:36:50    

je te deconseille <> pour lire sur des sockets
 
pour avoir un socket non bloquant sous windows normalement tu dois pouvoir utiliser IO::Socket qui a une method blocking (censé marché à partir de perl 5.8 pour activePerl) mais perso ca marche pas chez moi
 
ya une methode pour rendre le socket non bloquant specialement pour windows, je te la filerais lundi si tu veux.
 
mais le plus simple c'est encore de rester sur des sockets bloquants et de faire un select
 
regarde le module IO::Select
il te dit quel socket à qq chose à lire (can_read) et ensuite il te suffit de lire avec un sysread (surtout pas un read ou un <> ). Tu demande à lire une grose quantité de donnée (genre 65536) et le sysread te retournera tout ce qu'il peut lire (donc <= à 65536). Ensuite il faudra attendre qu'il y ai à nouveau qq chose à lire.
Si tu fait un read ou un <> à la place du sysread ca va foirer car Pelr va chercher à lire la taille exacte donnée au read, ou attendre le saut de ligne poyur le <>

Reply

Marsh Posté le 25-07-2004 à 13:16:35    

Merci beaucoup!
 
Je suis arrivé à faire ce que je veux avec un sysread.
Mais c'est bizzare, car si auparavant j'effectue une lecture
avec un <>, le sysread devient bloquant. Mais c'est pas grave je fais tout avec sysread maintenant.
encore merci :)

Reply

Marsh Posté le 25-07-2004 à 13:29:44    

utilise IO::Select avant CHAQUE sysread, pour etre certain qu'il y a qqchose à lire, car sinon ca va bloquer

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed