socket_recv
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_recv — Recibe datos de un socket conectado
Descripción
data se pasa por referencia, por lo que debe estar presente
en la lista de argumentos. Los datos recibidos desde la
socket por socket_recv()
serán devueltos en data.
Parámetros
socket
-
socket debe ser una instancia de Socket
previamente creada por socket_create().
data
-
Los datos recibidos serán transmitidos en
data. Si ocurre un error, si la conexión
está cerrada o si no hay datos disponibles,
data valdrá entonces null.
length
-
Hasta length bytes serán leídos desde
el host remoto.
flags
-
El valor de flags puede ser una combinación
de los siguientes flags, agrupados mediante el operador OR binario
(|).
Valores posibles de flags
| Flag |
Descripción |
MSG_OOB |
Trata datos fuera de banda.
|
MSG_PEEK |
Recibe los datos desde el inicio de la cola sin eliminarlos de la cola.
|
MSG_WAITALL |
Bloquea antes de que al menos length bytes sean recibidos.
Sin embargo, si se intercepta una señal o la conexión se termina,
la función puede devolver menos datos.
|
MSG_DONTWAIT |
Si este flag está especificado, la función devolverá datos cuando normalmente habría bloqueado.
|
Valores devueltos
socket_recv() devuelve el número de bytes recibidos,
o false si ha ocurrido un error. El código de error actual puede ser
recuperado llamando a socket_last_error(). Este código
de error puede ser pasado a la función socket_strerror()
para obtener una representación textual del error.
Ejemplos
Ejemplo #1 Ejemplos con socket_recv()
Este ejemplo es una reescritura del ejemplo tomado en
Ejemplos para utilizar
socket_recv().
<?php
error_reporting(E_ALL);
echo "<h2>Conexión TCP/IP</h2>\n";
/* Obtiene el puerto del servicio WWW. */
$service_port = getservbyname('www', 'tcp');
/* Obtiene la dirección IP del host objetivo. */
$address = gethostbyname('www.example.com');
/* Crea un socket TCP/IP. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() ha fallado: razón: " . socket_strerror(socket_last_error()) . "\n";
} else {
echo "OK.\n";
}
echo "Intentando conectar a '$address' en el puerto '$service_port'...";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
echo "socket_connect() ha fallado.\nRazón: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
} else {
echo "OK.\n";
}
$in = "HEAD / HTTP/1.1\r\n";
$in .= "Host: www.example.com\r\n";
$in .= "Connection: close\r\n\r\n";
$out = '';
echo "Enviando una solicitud HTTP HEAD...";
socket_write($socket, $in, strlen($in));
echo "OK.\n";
echo "Leyendo la respuesta:\n\n";
$buf = 'Este es mi búfer.';
if (false !== ($bytes = socket_recv($socket, $buf, 2048, MSG_WAITALL))) {
echo "$bytes bytes leídos desde socket_recv(). Cerrando el socket...";
} else {
echo "socket_recv() ha fallado; razón: " . socket_strerror(socket_last_error($socket)) . "\n";
}
socket_close($socket);
echo $buf . "\n";
echo "OK.\n\n";
?>
Resultado del ejemplo anterior es similar a:
<h2>Conexión TCP/IP</h2>
OK.
Intentando conectar a '208.77.188.166' en el puerto '80'...OK.
Enviando una solicitud HTTP HEAD...OK.
Leyendo la respuesta:
123 bytes leídos desde socket_recv(). Cerrando el socket...HTTP/1.1 200 OK
Date: Mon, 14 Sep 2009 08:56:36 GMT
Server: Apache/2.2.3 (Red Hat)
Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT
ETag: "b80f4-1b6-80bfd280"
Accept-Ranges: bytes
Content-Length: 438
Connection: close
Content-Type: text/html; charset=UTF-8
OK.