(PHP 4 >= 4.1.0, PHP 5, PHP 7)
socket_recvfrom — Recibe información desde un socket que esté o no orientado a conexión
$socket
, string &$buf
, int $len
, int $flags
, string &$name
[, int &$port
] ) : int
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.
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.
Versión | Descripción |
---|---|
4.3.0 | socket_recvfrom() ahora es segura a nivel binario. |