(PHP 4 >= 4.1.0, PHP 5, PHP 7)
socket_recvfrom — Reçoit des données d'un socket, connecté ou pas
$socket
, string &$buf
, int $len
, int $flags
, string &$name
[, int &$port
] )
La fonction socket_recvfrom() reçoit
len
octets de données du buffer buf
depuis name
sur le port port
(si le socket
n'est pas du type AF_UNIX
), en utilisant
socket
. socket_recvfrom() peut être utilisé
pour récupérer les données depuis des sockets connectées ou non. De plus,
un ou plusieurs drapeaux peuvent être spécifiés pour modifier ce comportement.
Les paramètres name
et port
doivent être passés par référence. Si le socket n'est pas connecté,
name
contiendra l'adresse internet de l'hôte distant ou
le chemin du socket Unix. Si le socket est connecté, name
vaut NULL
. De plus, le paramètre port
contiendra
le port de l'hôte distant dans le cas d'un socket AF_INET
ou
AF_INET6
.
socket
Le paramètre socket
doit être une ressource
de socket créé par la fonction socket_create().
buf
Les données récupérées seront placées dans la variable spécifiée par ce paramètre.
len
Jusqu'à len
octets doivent être récupérés
de l'hôte distant.
flags
La valeur de ce paramètre peut être une combinaison des drapeaux suivants, joints par un OU binaire (|).
Drapeau | Description |
---|---|
MSG_OOB |
Processus en dehors de la bande de données. |
MSG_PEEK |
Reçoit les données depuis le début de la file de réception sans les supprimer de cette file. |
MSG_WAITALL |
Bloque tant qu'au moins len octets n'ont pas
été reçus. Cependant, si un signal est reçu ou l'hôte distant
se déconnecte, la fonction pourra retourner moins de données.
|
MSG_DONTWAIT |
Lorsque ce drapeau est défini, la fonction retourne des données même si elle devrait rester bloquer. |
name
Si le socket est du type AF_UNIX
,
name
sera le chemin vers ce fichier. Sinon,
pour les sockets non-connectés, name
est l'adresse
IP de l'hôte distant, ou NULL
si le socket est connecté.
port
Cet argument ne s'applique qu'aux sockets AF_INET
et
AF_INET6
, et spécifie le port distant depuis lequel
les données sont reçues. Si la socket est connectée,
port
vaudra NULL
.
socket_recvfrom() retourne le nombre d'octets
reçus, ou FALSE
si une erreur survient. Le code erreur actuel peut
être retrouvé en appelant la fonction socket_last_error().
Ce code erreur peut être passé à la fonction socket_strerror()
afin de récupérer une explication textuelle de l'erreur.
Exemple #1 Exemple avec socket_recvfrom()
<?php
error_reporting(E_ALL | E_STRICT);
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_bind($socket, '127.0.0.1', 1223);
$from = '';
$port = 0;
socket_recvfrom($socket, $buf, 12, 0, $from, $port);
echo "Réception de $buf depuis l'adresse distant $from et du port distant $port" . PHP_EOL;
?>
Cet exemple initialise un socket UDP sur le port 1223 de l'adresse 127.0.0.1 et affiche au moins 12 caractères reçus depuis l'hôte distant.
Version | Description |
---|---|
4.3.0 | socket_recvfrom() est maintenant compatible avec les données binaires. |