(PHP 5, PHP 7, PHP 8)
stream_socket_server — Crea un socket de servidor Unix o Internet
$address
,&$error_code
= null
,&$error_message
= null
,$flags
= STREAM_SERVER_BIND | STREAM_SERVER_LISTEN,$context
= null
stream_socket_server() crea un flujo o un datagrama en el socket especificado address
.
stream_socket_server() solo crea un socket y, para aceptar conexiones, se debe utilizar stream_socket_accept().
address
El tipo de socket creado se determina por el transporte especificado con el formato URL siguiente: transport://target
.
Para un socket de Internet (AF_INET
) como TCP y UDP, el target
de remote_socket
será una dirección IP o un nombre de host seguido de dos puntos y un número de puerto. Para un socket Unix, el target
debe ser un fichero de socket del sistema.
Según el entorno, los sockets de dominio Unix pueden no estar disponibles. Una lista de los transportes disponibles se puede obtener mediante stream_get_transports(). Consulte Lista de los modos de transporte de sockets disponibles para conocer la lista de transportes nativos.
error_code
Si los argumentos opcionales error_code
y error_message
están presentes, se configurarán para indicar el nivel de error actual de las funciones del sistema socket()
, bind()
y listen()
. Si el valor devuelto en error_code
es 0
y la función devuelve false
, esto indica que el error ocurrió antes de la llamada a bind()
. Esto probablemente se deba a un problema de inicialización del socket. Tenga en cuenta que los argumentos error_code
y error_message
siempre se pasarán por referencia.
error_message
Consulte la descripción de error_code
.
flags
Un campo de bits, que puede ser la combinación de cualquier opción de creación de socket.
Nota:
Para los sockets UDP, se debe utilizar la constante
STREAM_SERVER_BIND
como valor del parámetroflags
.
context
Devuelve el flujo creado, o bien false
en caso de error.
Versión | Descripción |
---|---|
8.0.0 |
context ahora es nullable.
|
Ejemplo #1 Ejemplo con stream_socket_server()
<?php
$socket = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr);
if (!$socket) {
echo "$errstr ($errno)<br />\n";
} else {
while ($conn = stream_socket_accept($socket)) {
fputs ($conn, 'La hora local es ' . date('n/j/Y g:i a') . "\n");
fclose ($conn);
}
fclose($socket);
}
?>
El ejemplo siguiente muestra cómo leer la fecha y la hora en un servicio UDP (puerto 13) en su propia máquina, tal como se presenta con la función stream_socket_client():
Nota: La mayoría de los sistemas requieren acceso de administrador para abrir un socket en los puertos por debajo de 1024.
Ejemplo #2 Utilizar un servidor de socket UDP
<?php
$socket = stream_socket_server("udp://0.0.0.0:13", $errno, $errstr, STREAM_SERVER_BIND);
if (!$socket) {
echo "ERROR: $errno - $errstr<br />\n";
} else {
while ($conn = stream_socket_accept($socket)) {
fwrite($conn, date("D M j H:i:s Y\r\n"));
fclose($conn);
}
fclose($socket);
}
?>
Nota: Cuando se especifique una dirección numérica IPv6 (por ej.,
fe80::1
), la IP debe ser encerrada entre corchetes — por ejemplo,tcp://[fe80::1]:80
.