Linux x86_64Rede & sockets#42
connect
Estabelece conexão de um socket a um endereço remoto (ou associa um socket datagrama a um destino padrão).
Descrição
Para sockets orientados a conexão (TCP), inicia o handshake com o par remoto. Para sockets datagrama (UDP), apenas fixa o endereço padrão de destino/origem para send/recv subsequentes, sem enviar nada pela rede.
Header:
sys/socket.hman 2Nota
Em sockets não bloqueantes, é comum e esperado retornar -1/EINPROGRESS imediatamente; a conclusão é detectada aguardando o socket ficar writable (poll/epoll).
Assinatura
int connect(int sockfd, const struct sockaddr * addr, socklen_t addrlen);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| sockfd | int | Descritor do socket. |
| addr | const struct sockaddr * | Endereço de destino. |
| addrlen | socklen_t | Tamanho de `addr`. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | sockfdint |
| rsi | argumento 2 | addrconst struct sockaddr * |
| rdx | argumento 3 | addrlensocklen_t |
Valor de retorno
0 em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EACCES(13)
- Permissão negada.
- EADDRINUSE(98)
- Endereço já em uso.
- EALREADY(114)
- Operação já em andamento.
- ECONNREFUSED(111)
- Conexão recusada pelo destino.
- EINPROGRESS(115)
- Operação em andamento (assíncrona, ex.: connect não bloqueante).
- ETIMEDOUT(110)
- Conexão expirou (timeout).
- ENETUNREACH(101)
- Rede inalcançável.