socket_recv
socket_select
Fonctions sur les sockets
PHP Manual

# socket_recvfrom

(PHP 4 >= 4.0.7, PHP 5)

socket_recvfrom — Reçoit des données d'une socket, connectée ou pas

### Description

int socket_recvfrom ( resource `$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 la 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 la socket n'est pas connectée, `name` contiendra l'adresse internet de l'hôte distant ou le chemin du socket Unix. Si la socket est connectée, `name` vaut `NULL`. De plus, le paramètre `port` contiendra le port de l'hôte distant dans le cas d'une socket `AF_INET` ou `AF_INET6`.

### Liste de paramètres

`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 (|).

  Valeurs possibles pour `flags`
  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` | Bloc 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 la socket est du type `AF_UNIX`, `name` sera le chemin vers ce fichier. Sinon, pour les sockets non-connectées, `name` est l'adresse IP de l'hôte distant, ou `NULL` si la socket est connectée.

`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`.

### Valeurs de retour

socket_recvfrom() retourne le nombre d'octets reçus, ou -1 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.

### Exemples

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 une 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.

### Historique

Version | Description
--- | ---
4.3.0 | socket_recvfrom() est maintenant compatible avec les données binaires.

### Voir aussi

- socket_recv()
- socket_send()
- socket_sendto()
- socket_create()

socket_recv
socket_select
Fonctions sur les sockets
PHP Manual