# fsockopen

(PHP 4, PHP 5, PHP 7, PHP 8)

fsockopen — Abre una conexión vía sockets a Internet o a un dominio Unix

### Descripción

fsockopen(
string `$hostname`,
int `$port` = -1,
int `&$errno` = ?,
string `&$errstr` = ?,
float `$timeout` = ini_get("default_socket_timeout")
): resource

Inicia una conexión vía sockets al recurso especificado por `hostname`.

PHP soporta objetivos Internet y dominios Unix tal y como se describe en Lista de Transportes de Sockets Soportados. También se puede obtener una lista de los transportes soportados utilizando stream_get_transports().

El socket será abierto por defecto en modo de bloqueo. Es posible cambiarlo a modo de no bloqueo utilizando stream_set_blocking().

La función stream_socket_client() es similar, pero provee un conjunto más amplio de opciones, incluyendo conexión no bloqueante y la posibilidad de proporcionar contexto a una secuencia.

### Parámetros

`hostname`

  Si el soporte a OpenSSL está instalado, puedes añadir al principio del `hostname` tanto `ssl://` como `tls://` para utilizar una conexión de cliente SSL o TLS sobre TCP/IP para conectar al host remoto.

`port`

  El número de puerto. Se puede omitir con `-1` para transportes que no empleen puertos, como `unix://`.

`errno`

  Si se proporciona, contiene el número de error a nivel de sistema que se ha producido en la llamada a `connect()` a nivel de sistema.

  Si el valor devuelto en `errno` es `0` y la función devuelve `false`, esto indica que el error ocurrió antes de la llamada a `connect()`. Probablemente se deba a un problema al inicializar el socket.

`errstr`

  El mensaje de error como string.

`timeout`

  El tiempo límite de la conexión, en segundos.

  > Nota:

  > Si fuera necesario definir un tiempo de límite para leer/escribir datos a través del socket, se deberá utilizar stream_set_timeout(), ya que el parámetro `timeout` de fsockopen() sólo se aplica al realizar la conexión del socket.

### Valores devueltos

fsockopen() devuelve un puntero a fichero que puede ser utilizado junto a otras funciones de fichero (como fgets(), fgetss(), fwrite(), fclose(), y feof()). Si la llamada falla, devolverá `false`

### Errores/Excepciones

Lanza `E_WARNING` si el `hostname` no es un dominio válido.

### Ejemplos

Ejemplo #1 Ejemplo de fsockopen()

`<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>`

Ejemplo #2 Utilización de una conexión UDP

El ejemplo inferior muestra cómo obtener el día y la hora del servicio UDP "daytime" (puerto 13) en el servidor local.

`<?php
$fp = fsockopen("udp://127.0.0.1", 13, $errno, $errstr);
if (!$fp) {
echo "ERROR: $errno - $errstr<br />\n";
} else {
fwrite($fp, "\n");
echo fread($fp, 26);
fclose($fp);
}
?>`

### Notas

> Nota:

> Dependiendo del entorno, el dominio Unix o el tiempo de expiración opcional pueden no estar disponibles.

Advertencia

Los sockets UDP pueden en ocasiones aparecerán como abiertos sin errores, incluso aunque el servidor remoto no esté disponible. El error sólo aparecerá una vez se lean o escriban datos del/al socket. Esto es debido a que UDP es un protoclo "sin conexión", lo que significa que el sistema operativo no trata de establecer un enlace con el socket hasta que realmente necesita enviar o recibir datos.

> Nota: Cuando se especifique una dirección numérica IPv6 (por ej., `fe80::1`), la IP debe ser encerrada entre corchetes — por ejemplo, `tcp://[fe80::1]:80`.

### Ver también

- pfsockopen() - Abre Internet persistente o conexión de socket de dominio Unix
- stream_socket_client() - Abrir una conexión de socket de dominio de Internet o Unix
- stream_set_blocking() - Establecer el modo bloqueo/no-bloqueo en un flujo
- stream_set_timeout() - Establecer un perido de tiempo de espera en un flujo
- fgets() - Obtiene una línea desde el puntero a un fichero
- fgetss() - Obtiene un línea desde un puntero a un archivo y elimina las etiquetas HTML
- fwrite() - Escritura de un archivo en modo binario seguro
- fclose() - Cierra un puntero a un archivo abierto
- feof() - Comprueba si el puntero a un archivo está al final del archivo
- socket_connect() - Inicia una conexión sobre un socket
- La extensión Curl