Problème fread()

Odd -  
 Utilisateur anonyme -
Bonjour,

J'ai un petit souci avec mon code :
$server_name = "server1.freeserv.fr";
$server_port = "34000";

$fp = fsockopen("udp://".gethostbyname($server_name), $server_port, $errno, $errstr, 30);
if (!$fp) {
	echo "Echec de la connection<br />\n";
    echo "$errstr ($errno)<br />\n";
} else {
	echo "Connection réussie<br />\n";
	echo "....Envoi de la requête<br />\n";
	echo "...........Valeur retour du fputs : ".fputs($fp, "/xff/xff/xff/xffchallenge rcon\n", 19)."<br />\n";
	echo "....Lecture de la réponse<br />\n";
	$reponse = fread($fp,4);
	echo "...........Valeur retour du fread : ".$reponse."<br />\n";
    fclose($fp);
}


Je pense que certains auront compris que j'essaye de communiquer avec un serveur half-life (hl1).
Le script met longtemps à s'executer et voici l'affichage :

Connection réussie
....Envoi de la requête
...........Valeur retour du fputs : 19
....Lecture de la réponse


Lorsque j'enlève l'argument "4" (length) du fread, le script s'exécute très rapidement mais bien sur rien ne m'est retourné...

Quelqu'un aurait il une idée ?

21 réponses

Odd
 
Re,

c'est à dire "Si tout s'est bien passé" ?
J'ai l'impression que la lecture de la trame (du flux) plante totalement, et fait planter par la même occasion le script php, car la suite du script ne s'exécute même pas (echo "...........Valeur retour du fread : ".$reponse."<br />\n";).

Normalement, même si la fonction stream_get_line échouait, je devrai avoir l'affichage de ce qu'il y a à l'intérieur du echo suivant la commande...

En fait le problème n'est pas vraiment que cela touche des serveurs cs, vu que cela ne reste que du php...
Je n'ai pas d'outils de débugage...
Ce qui serait intéressant ça serait de savoir dans quel type de situation une fonction php de lecture de flux plante, et surtout si il n'y a pas de fonction permettant de mettre une sorte de timeout (si la lecture ne retourne rien au bout de se temps, elle s'arrete)...
0
Utilisateur anonyme
 
quand tout s'est bien passé : si le serveur a bien pris en compte ta commande et qu'elle s'est effectuée normalement. Donc si il n'y a pas de retour dans ce cas et qu'il n y a pas eu de problème, c est normal que ca bloque vu que ca attends quelque chose et qu'il n'y aura rien.

si j'ai raison, regarde si tu peux faire des thread en php et si oui, implémente en 1 qui regardera la réponse (5seconde de vie sera suffisant)
0