Linux x86_64Rede & sockets#307
sendmmsg
Envia múltiplas mensagens por um socket datagrama em uma única chamada de sistema.
Descrição
Análoga de envio para `recvmmsg`, reduzindo overhead de syscall ao emitir rajadas de pacotes.
man 2Desde o kernel 3.0
Assinatura
int sendmmsg(
int sockfd,
struct mmsghdr * msgvec,
unsigned int vlen,
int flags
);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| sockfd | int | Descritor do socket. |
| msgvec | struct mmsghdr * | Vetor de mensagens a enviar. |
| vlen | unsigned int | Número de elementos em `msgvec`. |
| flags | int | Flags como MSG_DONTWAIT, combinadas com as de sendmsg. |
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 | msgvecstruct mmsghdr * |
| rdx | argumento 3 | vlenunsigned int |
| r10 | argumento 4 | flagsint |
Valor de retorno
Número de mensagens enviadas 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).
- EMSGSIZE(90)
- Mensagem grande demais para o socket.
- ENOBUFS(105)
- Sem espaço em buffer disponível.