connect(2)

NOMBRE
connect - inicia una conexión en un conector (socket)

BIBLIOTECA
Biblioteca Estándar C (libc, -lc)

SINOPSIS
#include <sys/socket.h>

int connect(int sockfd, const struct sockaddr *addr,
            socklen_t addrlen);

DESCRIPCIÓN
La llamada al sistema connect() conecta el socket al que hace referencia el descriptor de archivo sockfd con la dirección definida en addr. El argumento addrlen definirá el tamaño de addr. El formato de la dirección en addr se determina por el espacio de direcciones del socket sockfd; consulte socket(2) para más detalles.

Si el socket sockfd es de tipo SOCK_DGRAM, entonces addr es la dirección a la que se envían los datagramas por defecto y la única dirección desde la que se reciben. Si el socket es de tipo SOCK_STREAM o SOCK_SEQPACKET, esta llamada intenta establecer una conexión con el socket vinculado a la dirección indicada en addr.

Algunos sockets de protocolo (por ejemplo, los sockets de flujo de dominio UNIX) pueden ejecutar connect() correctamente una única vez.

Algunos sockets de protocolo (por ejemplo, los sockets de datagramas en los dominios UNIX e Internet) pueden usar connect() múltiples veces para cambiar su asociación.

Algunos sockets de protocolo (por ejemplo, los sockets TCP, así como los de datagramas en los dominios UNIX e Internet) pueden finalizar la asociación al conectarse a una dirección cuyo miembro sa_family de sockaddr esté definido en AF_UNSPEC. Posteriormente, el socket podrá conectarse a otra dirección. AF_UNSPEC es compatible desde Linux 2.2.

VALOR DEVUELTO
Si la conexión o enlace tiene éxito, se devuelve 0. En caso de error, se devuelve -1, y se asigna a la variable errno un valor apropiado.

ERRORES
Los siguientes sólo son errores generales de conector. Puede haber otros códigos de error específicos del dominio.

EACCES
    Para sockets de dominio UNIX, que se identifican por la ruta de acceso: Se deniega el permiso de escritura en el archivo del socket o se deniega el permiso de búsqueda para uno de los directorios en el prefijo de la ruta. (Consulte también path_resolution(7).)

EACCES
EPERM
    El usuario ha intentado conectarse a una dirección de difusión (broadcast) sin que el conector tenga activa la opción de difusión, o la petición de conexión ha fallado debido a una regla del cortafuegos local.

EACCES
    También se puede retornar si una norma de SELinux denegó una conexión (por ejemplo, si existe una norma que indica que un proxy HTTP solo puede conectarse a puertos asociados con servidores HTTP y el proxy intenta conectarse a un puerto diferente).

EADDRINUSE
    La dirección local ya está en uso.

EADDRNOTAVAIL
    (Sockets de dominio de Internet) El socket al que hace referencia sockfd no se había vinculado previamente a una dirección y, al intentar vincularlo a un puerto efímero, se determinó que todos los números de puerto en el rango de puertos efímeros están actualmente en uso. Consulte la explicación de /proc/sys/net/ipv4/ip_local_port_range en ip(7).

EAFNOSUPPORT
    La dirección pasada no tiene la familia de direcciones correcta en su campo sa_family.

EAGAIN
    Para sockets de dominio UNIX sin bloqueo, el socket es sin bloqueo y la conexión no se puede completar inmediatamente. Para otras familias de sockets, no hay suficientes entradas en el caché de enrutamiento.

EALREADY
    El conector es no bloqueante y todavía no se ha terminado un intento de conexión anterior.

EBADF
    sockfd no es descriptor válido de archivos abiertos.

ECONNREFUSED
    Un connect() en un conector de flujo, no ha econtrado a nadie a la esucha en la dirección remota.

EFAULT
    La estructura de dirección del conector está fuera del espacio de direcciones del usuario.

EINPROGRESS
    El socket no es bloqueante y la conexión no se puede completar inmediatamente. (Los sockets de dominio UNIX fallaron con EAGAIN). Es posible usar select(2) o poll(2) para completar la conexión seleccionando el socket para escritura. Después de que select(2) indique la capacidad de escritura, utilice getsockopt(2) para leer la opción SO_ERROR en el nivel SOL_SOCKET y determinar si connect() se completó correctamente (SO_ERROR es cero) o no (SO_ERROR es uno de los códigos de error habituales que se listan aquí y explicain el motivo del fallo).

EINTR
    La señal atrapada ha interrumpido la llamada del sistema; consulte signal(7).

EISCONN
    El conector ya está conectado.

ENETUNREACH
    Red inaccesible.

ENOTSOCK
    El descriptor de archivo sockfd no se refiere a un conector.

EPROTOTYPE
    El tipo de socket no admite el protocolo de comunicaciones solicitado. Este error puede ocurrir, por ejemplo, al intentar conectar un socket de datagrama de dominio UNIX a un socket de flujo.

ETIMEDOUT
    Finalizó el plazo de tiempo mientras se intentaba la conexión. El servidor puede estar demasiado ocupado para aceptar nuevas conexiones. Dese cuenta que para conectores IP el plazo de tiempo puede ser muy largo cuando se han habilitado los "syncookies" en el servidor.

VERSIONES
Los programas portables deben garantizar que addr.sun_path sea una cadena terminada en nulo para los sockets AF_UNIX.

ESTÁNDARES
POSIX.1-2024.

HISTORIAL
POSIX.1-2001, SVr4, 4.2BSD.

NOTAS
Si connect() falla, consideramos el estado del socket como no definido. Las aplicaciones portables deben cerrar el socket y crear uno nuevo para volver a conectar.

EJEMPLOS
En getaddrinfo(3) tiene un ejemplo del uso de connect().

VÉASE TAMBIÉN
accept(2), bind(2), getsockname(2), listen(2), socket(2), path_resolution(7), selinux(8)

TRADUCCIÓN
La traducción al español de esta página del manual fue creada por Miguel Angel Sepulveda <angel@vivaldi.princeton.edu>, Cesar D. Lobejon <cesar@alien.mec.es>, Juan Piernas <piernas@ditec.um.es> y Marcos Fouces <marcos@debian.org>

Esta traducción es documentación libre; lea la GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.

Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a debian-l10n-spanish@lists.debian.org.