stream_socket_server

(PHP 5, PHP 7, PHP 8)

stream_socket_serverCrea un socket de servidor Unix o Internet

Descripción

stream_socket_server(
    string $address,
    int &$error_code = null,
    string &$error_message = null,
    int $flags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN,
    ?resource $context = null
): resource|false

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().

Parámetros

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ámetro flags.

context

Valores devueltos

Devuelve el flujo creado, o bien false en caso de error.

Historial de cambios

Versión Descripción
8.0.0 context ahora es nullable.

Ejemplos

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);
}
?>

Notas

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.

Ver también