socket_recv Reçoit des données d'un socket connecté &reftitle.description; intfalsesocket_recv Socketsocket stringnulldata intlength intflags La fonction socket_recv reçoit length octets de données dans data depuis socket. socket_recv peut être utilisée pour récupérer des données depuis des sockets connectés. Aussi, des drapeaux permettent de changer le comportement de la fonction. data est passé par référence, il doit donc être présent dans la liste des arguments. Les données reçues depuis la socket par socket_recv seront retournées dans data. &reftitle.parameters; socket socket doit être une instance de Socket précédemment créée par socket_create(). data Les données reçues seront transmises dans data. Si une erreur survient, si la connexion est fermée ou si aucune donnée n'est disponible, data vaudra alors &null;. length Jusqu'à length octets seront lus depuis l'hôte distant. flags La valeur de flags peut être une combinaison des drapeaux suivants, groupés au moyen de l'opérateur binaire OR (|). Valeurs possibles de <parameter>flags</parameter> Flag Description MSG_OOB Traite des données hors de bande. MSG_PEEK Reçoit les données depuis le début de la queue sans pour autant les supprimer de la queue. MSG_WAITALL Bloque avant qu'au moins length sont reçues. Cependant, si un signal est intercepté ou si la connexion est terminée, la fonction pourra retourner moins de données. MSG_DONTWAIT Si ce drapeau est spécifié, la fonction retournera ses données alors qu'en temps normal elle aurait bloqué.
&reftitle.returnvalues; socket_recv retourne le nombre d'octets reçus, ou &false; si une erreur est apparue. Le code d'erreur actuel peut être récupéré en appelant socket_last_error. Ce code d'erreur peut être passé à la fonction socket_strerror pour avoir une représentation textuelle de l'erreur. &reftitle.changelog; &Version; &Description; &sockets.changelog.socket-param; &reftitle.examples; Exemples avec <function>socket_recv</function> Cet exemple est une réécriture de l'exemple pris sur pour utiliser socket_recv. TCP/IP Connection\n"; /* Récupère le port du service WWW. */ $service_port = getservbyname('www', 'tcp'); /* Récupère l'adresse IP de l'hôte cible. */ $address = gethostbyname('www.example.com'); /* Crée un socket TCP/IP. */ $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket === false) { echo "socket_create() a échoué: raison: " . socket_strerror(socket_last_error()) . "\n"; } else { echo "OK.\n"; } echo "Tentative de connexion à '$address' sur le port '$service_port'..."; $result = socket_connect($socket, $address, $service_port); if ($result === false) { echo "socket_connect() a échoué.\nRaison: ($result) " . socket_strerror(socket_last_error($socket)) . "\n"; } else { echo "OK.\n"; } $in = "HEAD / HTTP/1.1\r\n"; $in .= "Host: www.example.com\r\n"; $in .= "Connexion: Fermée\r\n\r\n"; $out = ''; echo "Envoi d'une requête HTTP HEAD..."; socket_write($socket, $in, strlen($in)); echo "OK.\n"; echo "Lecture de la réponse:\n\n"; $buf = 'Ceci est mon buffer.'; if (false !== ($bytes = socket_recv($socket, $buf, 2048, MSG_WAITALL))) { echo "$bytes octets lus depuis socket_recv(). Fermeture du socket..."; } else { echo "socket_recv() a échoué; raison: " . socket_strerror(socket_last_error($socket)) . "\n"; } socket_close($socket); echo $buf . "\n"; echo "OK.\n\n"; ?> ]]> L'exemple ci-dessus produit un résultat ressemblant à celà: TCP/IP Connection OK. Tentative de connexion à '208.77.188.166' sur le port '80'...OK. Envoi d'une requête HTTP HEAD...OK. Lecture de la réponse: 123 octets lus depuis socket_recv(). Fermeture du socket...HTTP/1.1 200 OK Date: Mon, 14 Sep 2009 08:56:36 GMT Server: Apache/2.2.3 (Red Hat) Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT ETag: "b80f4-1b6-80bfd280" Accept-Ranges: bytes Content-Length: 438 Connexion : Fermée Content-Type: text/html; charset=UTF-8 OK. ]]>