Voltar à lista
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âmetroTipoDescrição
sockfdintDescritor do socket.
msgvecstruct mmsghdr *Vetor de mensagens a enviar.
vlenunsigned intNúmero de elementos em `msgvec`.
flagsintFlags como MSG_DONTWAIT, combinadas com as de sendmsg.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1sockfdint
rsiargumento 2msgvecstruct mmsghdr *
rdxargumento 3vlenunsigned int
r10argumento 4flagsint

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.

Relacionadas