Linux x86_64Rede & sockets#43
accept
Aceita a próxima conexão pendente na fila de um socket em modo de escuta, criando um novo socket conectado.
Descrição
O socket original (passado a `listen`) continua ouvindo por novas conexões; `accept` devolve um socket separado, dedicado à conversa com aquele cliente específico.
Header:
sys/socket.hman 2Diferença entre versões
`accept4` (syscall 288) é preferível quando se deseja aplicar SOCK_NONBLOCK/SOCK_CLOEXEC atomicamente no novo socket.
Assinatura
int accept(int sockfd, struct sockaddr * addr, socklen_t * addrlen);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| sockfd | int | Socket em modo de escuta. |
| addr | struct sockaddr * | Se não for NULL, recebe o endereço do par remoto. |
| addrlen | socklen_t * | Tamanho de `addr`; atualizado com o tamanho real do endereço. |
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 | addrstruct sockaddr * |
| rdx | argumento 3 | addrlensocklen_t * |
Valor de retorno
Um novo descritor de socket conectado em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EAGAIN(11)
- Recurso temporariamente indisponível (tente novamente); também conhecido como EWOULDBLOCK.
- ECONNABORTED(103)
- Conexão abortada localmente.
- EINTR(4)
- Chamada interrompida por um sinal.
- EMFILE(24)
- Limite de arquivos abertos do processo atingido.
- ENFILE(23)
- Limite de arquivos abertos no sistema atingido.
- EPERM(1)
- Operação não permitida (falta de privilégio).
- EPROTO(71)
- Erro de protocolo.