Descripción
resource
stream_socket_client ( string socket_remoto [, int &errno [, string &errstr [, float tiempo_espera [, int banderas [, resource contexto]]]]])
Inicia una conexión secuenciada o tipo datagrama al
destino especificado por socket_remoto. 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.
El tiempo_espera opcional puede ser usado
para establecer un tiempo de espera máximo en segundos
para el llamado de conexión del sistema.
banderas es un campo de máscara de
bits que puede ser definido como una combinación de
banderas de conexión. Actualmente, las banderas de
conexión disponibles están limitadas a
STREAM_CLIENT_ASYNC_CONNECT y
STREAM_CLIENT_PERSISTENT.
Nota:
Si necesita establecer un tiempo de espera para la
lectura/escritura de datos sobre el socket, use
stream_set_timeout(), ya que el
parámetro tiempo_espera de
stream_socket_client() sólo se aplica
cuando se establece la conexión con el socket.
stream_socket_client() devuelve un recurso de
secuencia que puede ser usado junto con las otras funciones de
archivos (tales como fgets(),
fgetss(), fwrite(),
fclose(), y feof()).
Si la llamada falla, devolverá FALSE y si los argumentos
opcionales errno y
errstr están presentes,
éstos serán definidos de modo tal que indiquen el
error de nivel de sistema actual que ocurrió en el llamado
de nivel de sistema connect(). Si el valor
devuelto en errno es 0
y la función devolvió FALSE, es un indicio de que
el error ocurrió antes del llamado a
connect(). Esto es por lo general debido a un
problema con la inicialización del socket. Note que los
argumentos errno y
errstr serán siempre pasados por
referencia.
Dependiendo del entorno, el dominio Unix o el tiempo de espera de
conexión opcional pueden no estar disponibles. Una lista
de transportes disponibles puede ser recuperada usando
stream_get_transports(). Vea Apéndice N para consultar una lista de transportes
incorporados.
La secuencia será abierta por defecto en modo de
bloqueo. Puede modificarla a modo de no-bloqueo usando
stream_set_blocking().
Ejemplo 1. Ejemplo de
stream_socket_client()
<?php $da = stream_socket_client("tcp://www.example.com:80", $errno, $errstr, 30); if (!$da) { echo "$errstr ($errno)<br />\n"; } else { fwrite($da, "GET / HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n"); while (!feof($da)) { echo fgets($da, 1024); } fclose($da); } ?>
|
|
El siguiente ejemplo muestra cómo recuperar la fecha y
hora desde el servicio UDP "daytime" (puerto 13) en su
máquina local.
Ejemplo 2. Uso de una conexión UDP
<?php $da = stream_socket_client("udp://127.0.0.1:13", $errno, $errstr); if (!$da) { echo "ERROR: $errno - $errstr<br />\n"; } else { fwrite($da, "\n"); echo fread($da, 26); fclose($da); } ?>
|
|
| Aviso |
Los sockets UDP parecerán haber sido abiertos sin error
en ocasiones, incluso si el host remoto no ha podido ser
contactado. El error solo se hará aparente cuando lea o
escriba datos desde/hacia el socket. La razón de esto es
que UDP es un protocolo "sin conexión", lo que quiere
decir que el sistema operativo no intenta establecer un enlace
para el socket hasta que realmente necesita enviar o recibir
datos.
|
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_server(),
stream_set_blocking(),
stream_set_timeout(),
stream_select(),
fgets(),
fgetss(), fwrite(),
fclose(), feof(), y
la extensión Curl.