Scroll to navigation

connect(2) System Calls Manual 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.

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).)
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.
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).
La dirección local ya está en uso.
(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).
La dirección pasada no tiene la familia de direcciones correcta en su campo sa_family.
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.
El conector es no bloqueante y todavía no se ha terminado un intento de conexión anterior.
sockfd no es descriptor válido de archivos abiertos.
Un connect() en un conector de flujo, no ha econtrado a nadie a la esucha en la dirección remota.
La estructura de dirección del conector está fuera del espacio de direcciones del usuario.
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).
La señal atrapada ha interrumpido la llamada del sistema; consulte signal(7).
El conector ya está conectado.
Red inaccesible.
El descriptor de archivo sockfd no se refiere a un conector.
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.
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.

ESTÁNDARES

POSIX.1-2008.

HISTORIAL

POSIX.1-2001, SVr4, 4.4BSD (connect() apareció por primera vez en 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 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.

2 Mayo 2024 Páginas de Manual de Linux 6.9.1