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.