Page 1 sur 1

socket read ou string overflow

Posté : 23 avr. 2008, 09:40
par DomiPi
Bonjour
J'utilise la fonction
$reponse = socket_read($socket,65536)(
pour lire des données sur un serveur via un socket.
Ca fonctionne mais pas si les données dépassent 16384 bytes, aparemment c'est coupé au dessus.
Mon buffer de lecture est pourtant de 65536 bytes.
C'est peut-être le string $reponse qui limite les données ?
Si qqun peut m'aider à trouver la config à changer ou résoudre autrement mon problème, je le remercie déjà.

Posté : 23 avr. 2008, 10:41
par Sékiltoyai
La fonction socket_read() lit des données textuelles par défaut, c'est à dire qu'elle arrête la lecture lorsqu'elle rencontre \r \n ou \0. Le problème est-il là.

Posté : 23 avr. 2008, 10:53
par Sékiltoyai
Par ailleurs, je n'en étais pas sûr, mais apparemment en PHP ça marche exactement comme en C, il faut régler des options si tu veux ajuster le comportement de ta socket, il faut utiliser socket_set_option(), et dans ton cas, tu devras peut être régler les valeurs SO_RCVLOWAT et SO_SNDLOWAT, qui sont respectivement la taille des buffers de réception et de transmission. Après je comptais le vérifier un jour mais je dois avouer que je ne connais pas leur taille par défaut, surtout qu'elle va dépendre de ton système, de même que la taille maximale…

Posté : 23 avr. 2008, 12:43
par DomiPi
Merci beaucoup Sékiltoyai
Ceci résoud mon problème
if(socket_set_option($socket,SOL_SOCKET,SO_RCVBUF,65536)==false)
	error_log("ERROR set option");
Bonne journée

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 23 avr. 2008, 12:46
par DomiPi
Comment j'active le "résolu" ?

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Oups avec un login ça va mieux !