(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.
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.
flagsUn 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_BINDcomo 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: Al especificar direcciones IPv6 en formato numérico (ej.
fe80::1) se debe colocar la dirección IP entre corchetes. Por ejemplo:tcp://[fe80::1]:80.