PHP 8.5.0 Alpha 1 available for testing

stream_socket_recvfrom

(PHP 5, PHP 7, PHP 8)

stream_socket_recvfromLee datos desde un socket, conectado o no

Descripción

stream_socket_recvfrom(
    resource $socket,
    int $length,
    int $flags = 0,
    ?string &$address = null
): string|false

stream_socket_recvfrom() acepta datos desde un socket remoto, hasta un total de length bytes.

Parámetros

socket

El socket remoto.

length

El número de bytes a recibir de socket.

flags

El valor de flags puede ser la combinación de las constantes siguientes:

Valores posibles para flags
STREAM_OOB Procesa los datos en modo OOB (out-of-band).
STREAM_PEEK Lee datos desde el socket, pero no utiliza el buffer. Las próximas llamadas a fread() o stream_socket_recvfrom() leerán los mismos datos.

address

Si el argumento address es proporcionado, recibirá la dirección del socket remoto.

Valores devueltos

Devuelve los datos leídos, como chaîne de caractères, o false en caso de error.

Ejemplos

Ejemplo #1 Ejemplo con stream_socket_recvfrom()

<?php
/* Abre un socket en el puerto 1234 de localhost */
$server = stream_socket_server('tcp://127.0.0.1:1234');

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

/* Lee un paquete (1500 es el tamaño clásico MTU) de datos OOB */
echo "Recibido Out-Of-Band: '" . stream_socket_recvfrom($socket, 1500, STREAM_OOB) . "'\n";

/* Lee los datos normales in-band, pero no modifica nada */
echo "Datos: '" . stream_socket_recvfrom($socket, 1500, STREAM_PEEK) . "'\n";

/* Vuelve a leer el mismo paquete, pero vacía el buffer. */
echo "Datos: '" . stream_socket_recvfrom($socket, 1500) . "'\n";

/* Finalización */
fclose($socket);
fclose($server);
?>

Notas

Nota:

Si el mensaje recibido es más grande que length, los datos adicionales pueden ser destruidos, dependiendo del tipo de socket utilizado (por ejemplo UDP).

Nota:

La llamada a stream_socket_recvfrom() en flujos basados en socket, después de la llamada a funciones de flujo basadas en buffer (como fread() o stream_get_line()) lee directamente los datos desde el socket y evita el uso del buffer con el flujo.

Ver también

add a note

User Contributed Notes 2 notes

up
23
cweiske at php dot net
15 years ago
Note that stream_socket_recvfrom() bypasses stream wrappers including TLS/SSL. While reading from an encrypted stream with fread() will return decrypted data, using stream_socket_recvfrom() will give you the original encrypted bytes.
up
6
MagicalTux at php dot net
14 years ago
This method may return a peer address not compatible with stream_socket_sendto() if in ipv6.

The ip returned by recvfrom is not within brackets ([]), and has the port appended, which makes it look like ::1:1234. To cut it properly, use strrpos()
To Top