Secuencias
PHP Manual

stream_socket_server

(PHP 5)

stream_socket_server — Crear un socket de servidor de dominio de Internet o Unix

Descripción

resource stream_socket_server ( string $socket_local [, int &$errno [, string &$errstr [, int $banderas [, resource $contexto ]]]] )

Crea un socket secuenciado o tipo datagrama en el socket_local especificado. El tipo de socket creado es determinado por el transporte especificado usando el formato de URL estándar: transporte://destino. Para sockets de Dominio de Internet (AF_INET) tales como TCP y UDP, la porción destino del parámetro socket_remoto debe consistir de un nombre de host o dirección IP, seguido de un signo de dos puntos y un número de puerto. Para sockets de dominio Unix, la porción destino debe apuntar al archivo de socket en el sistema de archivos. banderas es un campo de máscara de bits que puede definirse como una combinación de banderas de creación de sockets. El valor predeterminado de banderas es STREAM_SERVER_BIND | STREAM_SERVER_LISTEN.

Note: Para sockets UDP, debe usar STREAM_SERVER_BIND como el parámetro banderas .

Esta función solo crea un socket, para empezar a aceptar conexiones use stream_socket_accept().

Si la llamada falla, devolverá FALSE y si los argumentos opcionales errno y errstr están presentes, éstos serán definidos de forma tal que indiquen el error de nivel de sistema actual que ha ocurrido en los llamados de sistema socket(), bind(), y listen(). Si el valor devuelto en errno es 0 y la función ha devuelto FALSE, es un indicio de que el error ocurrió antes del llamado a bind(). Esto, por lo general, es debido a un problema en la inicialización del socket. Note que los argumentos errno y errstr siempre serán pasados por referencia.

Dependiendo del entorno, los sockets de dominio Unix pueden no estar disponibles. Una lista de transportes disponibles puede ser recuperada usando stream_get_transports(). Vea Lista de Transportes de Sockets Soportados para consultar una lista de transportes integrados.

Example#1 Uso de sockets de servidor TCP

<?php
$socket 
stream_socket_server("tcp://0.0.0.0:8000"$errno$errstr);
if (!
$socket) {
  echo 
"$errstr ($errno)<br />\n";
} else {
  while (
$con stream_socket_accept($socket)) {
    
fwrite($con'La hora local es ' date('n/j/Y g:i a') . "\n");
    
fclose($con);
  }
  
fclose($socket);
}
?>

El siguiente ejemplo muestra como actuar como servidor de hora, el cual puede responder a consultas sobre la hora actual, tal y como se muestra en un ejemplo ubicado en la página sobre stream_socket_client().

Note: La mayoría de sistemas requieren acceso de root para crear un socket de servidor en un puerto menor a 1024.

Example#2 Uso de sockets de servidor UDP

<?php
$socket 
stream_socket_server("udp://127.0.0.1:1113"$errno$errstrSTREAM_SERVER_BIND);
if (!
$socket) {
    die(
"$errstr ($errno)");
}

do {
    
$pqt stream_socket_recvfrom($socket10$peer);
    echo 
"$peer\n";
    
stream_socket_sendto($socketdate("D M j H:i:s Y\r\n"), 0,
    
$peer);
} while (
$pqt !== false);

?>

Note: Cuando se especifique una dirección numérica IPv6 (p.ej. fe80::1) se debe incluir la IP entre corchetes. Por ejemplo tcp://[fe80::1]:80.

Vea también stream_socket_client(), stream_set_blocking(), stream_set_timeout(), fgets(), fgetss(), fwrite(), fclose(), feof(), y la extensión Curl.


Secuencias
PHP Manual