stream_socket_recvfrom

(PHP 5, PHP 7)

stream_socket_recvfromRecibir información de un socket, conectado o no

Descripción

stream_socket_recvfrom ( resource $socket , int $length [, int $flags = 0 [, string &$address ]] ) : string

stream_socket_recvfrom() acepta información desde un socket remoto hasta length bytes.

Parámetros

socket

El socket remoto.

length

El número de bytes a recibir desde el socket.

flags

El valor de flags puede ser una combinación de los siguientes valores:

Valores posibles para flags
STREAM_OOB Procesar información OOB (out-of-band, fuera de banda).
STREAM_PEEK Recuperar información del socket, pero sin consumir el buffer. Las llamadas subsiguientes a fread() o stream_socket_recvfrom() verán la misma información.

address

Si se proporciona address, será rellenado con la dirección de socket remoto.

Valores devueltos

Devuelve la información leída, como cadena

Ejemplos

Ejemplo #1 Ejemplo de stream_socket_recvfrom()

<?php
/* Abrir un socket de servidor al puerto 1234 en localhost */
$server stream_socket_server('tcp://127.0.0.1:1234');

/* Aceptar una conexión */
$socket stream_socket_accept($server);

/* Tomar un paquete (1500 es un tamaño de MTU típico) de información OOB */
echo "Recibido Fuera de Banda: '" stream_socket_recvfrom($socket1500STREAM_OOB) . "'\n";

/* Echar un vistazo a la información en banda normal, pero sin comsumirla. */
echo "Información: '" stream_socket_recvfrom($socket1500STREAM_PEEK) . "'\n";

/* Obtener el mismo paquete exactamente otra vez, pero eliminándolo del buffer esta vez. */
echo "Información: '" stream_socket_recvfrom($socket1500) . "'\n";

/* Cerrarlo */
fclose($socket);
fclose($server);
?>

Notas

Nota:

Si un mensaje recibido es mayor que el parámetro length, los bytes en exceso se pueden desechar dependiendo del tipo de socket desde el que se recbió el mensaje (como UDP).

Nota:

Las llamadas a stream_socket_recvfrom() sobre flujos basados en sockets, después de las llamadas a funciones de flujos basados en buffer (como fread() o stream_get_line()), leen información directamente desde el socket y evitan el buffer del flujo.

Ver también