socket_recv
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_recv — Reçoit des données d'un socket connecté
Description
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.
Liste de paramètres
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 flags
| 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 jusqu'à ce qu'au moins length soient 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é.
|
Valeurs de retour
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.
Exemples
Exemple #1 Exemples avec socket_recv()
Cet exemple est une réécriture de l'exemple pris sur
Exemples pour utiliser
socket_recv().
<?php
error_reporting(E_ALL);
echo "<h2>TCP/IP Connection</h2>\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 .= "Connection: close\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";
?>
Résultat de l'exemple ci-dessus est similaire à :
<h2>TCP/IP Connection</h2>
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
Connection: close
Content-Type: text/html; charset=UTF-8
OK.