Voltar à lista
Linux x86_64Rede & sockets#44

sendto

Envia dados por um socket, opcionalmente especificando o endereço de destino (sockets sem conexão).

Descrição

Generalização de `write` para sockets: em sockets conectados, `addr` pode ser NULL; em sockets datagrama sem `connect` prévio, `addr` define para onde o pacote vai.

Header: sys/socket.hman 2

Assinatura

ssize_t sendto(
    int sockfd,
    const void * buf,
    size_t len,
    int flags,
    const struct sockaddr * dest_addr,
    socklen_t addrlen
);

Parâmetros

ParâmetroTipoDescrição
sockfdintDescritor do socket.
bufconst void *Buffer com os dados a enviar.
lensize_tTamanho de `buf` em bytes.
flagsintMSG_DONTWAIT, MSG_MORE, MSG_NOSIGNAL, etc.
dest_addrconst struct sockaddr *Endereço de destino, ou NULL para sockets já conectados.
addrlensocklen_tTamanho de `dest_addr`.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1sockfdint
rsiargumento 2bufconst void *
rdxargumento 3lensize_t
r10argumento 4flagsint
r8argumento 5dest_addrconst struct sockaddr *
r9argumento 6addrlensocklen_t

Valor de retorno

Número de bytes enviados 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.
EPIPE(32)
Pipe quebrado (sem leitor do outro lado).
ENOTCONN(107)
Socket não conectado.

Relacionadas