Linux x86_64Rede & sockets#47
recvmsg
Recebe uma mensagem de um socket em um vetor de buffers, incluindo dados de controle (ancillary data).
Descrição
Contraparte de leitura de `sendmsg`, incluindo a recepção de descritores de arquivo enviados via SCM_RIGHTS.
Header:
sys/socket.hman 2Assinatura
ssize_t recvmsg(int sockfd, struct msghdr * msg, int flags);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| sockfd | int | Descritor do socket. |
| msg | struct msghdr * | Recebe o vetor de buffers preenchido, endereço de origem e dados de controle. |
| flags | int | MSG_DONTWAIT, MSG_PEEK, MSG_WAITALL, etc. |
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 | msgstruct msghdr * |
| rdx | argumento 3 | flagsint |
Valor de retorno
Número de bytes recebidos 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.