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.

Nota: 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 Apéndice O para consultar una lista de transportes integrados.

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

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

Ejemplo 2. Uso de sockets de servidor UDP

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

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

?>

Nota: 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.

Hosting by: hurra.com
Generated: 2007-01-26 18:01:07