Secuencias
PHP Manual

stream_socket_client

(PHP 5)

stream_socket_client — Abrir una conexión de socket de dominio de Internet o Unix

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_CONNECT (predeterminada), STREAM_CLIENT_ASYNC_CONNECT y STREAM_CLIENT_PERSISTENT.

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

Note: El parámetro de tiempo de espera solo se aplica si no está intentando realizar una conexión asincrónica.

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 Lista de Transportes de Sockets Soportados para consultar una lista de transportes incorporados.

La secuencia será abierta de forma predeterminada en modo de bloqueo. Puede modificarla a modo de no-bloqueo usando stream_set_blocking().

Example#1 Ejemplo de stream_socket_client()

<?php
$da 
stream_socket_client("tcp://www.example.com:80"$errno$errstr30);
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($da1024);
    }
    
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.

Example#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($da26);
    
fclose($da);
}
?>
Warning

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.

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_server(), stream_set_blocking(), stream_set_timeout(), stream_select(), fgets(), fgetss(), fwrite(), fclose(), feof(), y la extensión Curl.


Secuencias
PHP Manual