(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_recvfrom — Recibe información desde un socket que esté o no orientado a conexión
$socket
,&$buf
,$len
,$flags
,&$name
,&$port
= ? La función socket_recvfrom() recibe len
bytes de información en buf
desde name
en el puerto port
(si el socket no es del tipo AF_UNIX
) usando socket
. socket_recvfrom() se puede usar para reunir información tanto desde socket conectados como de no conectados. Además, se pueden especificar una o más banderas para modificar el comportamiento de la función.
name
y port
deben ser pasados por referencia. Si el socket no está orientado a conexión, name
será establecido a la dirección del protocolo de internet del host remoto o a la ruta del socket UNIX. Si el socket está orientado a conxión, name
es null
. Además, port
contendrá el puerto del host remoto en el caso de un socket AF_INET
o AF_INET6
no conectado.
Nota: Esta función es segura binariamente.
socket
socket
debe ser un recurso socket previamente creado por socket_create().
buf
La información recibida será recuperada a la variable especificada por buf
.
len
Se obtendrán hasta len
bytes desde el host remoto.
flags
El valor de flags
puede ser una combinación de las siguientes banderas, unidas con el operador binario OR (|
).
Bandera | Descripción |
---|---|
MSG_OOB | Procesar información fuera de banda. |
MSG_PEEK | Recibir informaicón desde el inicio de la cola recibida sin eliminarla de la cola. |
MSG_WAITALL | Bloquea hasta que al menos se reciba len bytes. Sin embargo, si se captura una señal o el host remoto se desconecta, la función puede devolver menos información. |
MSG_DONTWAIT | Con esta bandera establecida, la función devuelve incluso si normalmente habría bloqueado. |
name
Si el socket es de tipo AF_UNIX
, name
es la ruta del archivo. Por lo demás, para sockets no conectados, name
es la dirección IP del host remoto, o null
si el socket está orientado a conexion.
port
Este argumento sólo se aplica a sockets AF_INET
y AF_INET6
, y especifica el puerto remoto desde el que la información es recibida. Si el socket está orientado a conexión, port
será null
.
socket_recvfrom() devuelve el número de bytes recibidos, o false
si hubo un error. El código de error real se puede recuperar llamando a socket_last_error(). Este código de error se puede pasar a socket_strerror() para obtener una explicación textual del error.
Ejemplo #1 Un ejemplo de 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 "Se recibió $buf desde la dirección remota $from y el puerto remoto $port" . PHP_EOL;
?>
Este ejemplo iniciará un socket UDP en el puerto 1223 de 127.0.0.1 e imprimirá al menos 12 caracteres recibidos desde un host remoto.