Linux x86_64Rede & sockets#45
recvfrom
Recebe dados de um socket, opcionalmente capturando o endereço de origem (sockets sem conexão).
Descrição
Contraparte de leitura de `sendto`.
Header:
sys/socket.hman 2Assinatura
ssize_t recvfrom(
int sockfd,
void * buf,
size_t len,
int flags,
struct sockaddr * src_addr,
socklen_t * addrlen
);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| sockfd | int | Descritor do socket. |
| buf | void * | Buffer de destino para os dados recebidos. |
| len | size_t | Capacidade de `buf` em bytes. |
| flags | int | MSG_DONTWAIT, MSG_PEEK, MSG_WAITALL, etc. |
| src_addr | struct sockaddr * | Se não for NULL, recebe o endereço de origem. |
| addrlen | socklen_t * | Tamanho de `src_addr`; atualizado com o tamanho real. |
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 | bufvoid * |
| rdx | argumento 3 | lensize_t |
| r10 | argumento 4 | flagsint |
| r8 | argumento 5 | src_addrstruct sockaddr * |
| r9 | argumento 6 | addrlensocklen_t * |
Valor de retorno
Número de bytes recebidos (0 indica que o par fechou a conexão) 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.
- ECONNRESET(104)
- Conexão resetada pelo par (peer).
- EINTR(4)
- Chamada interrompida por um sinal.
- ENOTCONN(107)
- Socket não conectado.