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 2Assinatura
ssize_t sendto(
int sockfd,
const void * buf,
size_t len,
int flags,
const struct sockaddr * dest_addr,
socklen_t addrlen
);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| sockfd | int | Descritor do socket. |
| buf | const void * | Buffer com os dados a enviar. |
| len | size_t | Tamanho de `buf` em bytes. |
| flags | int | MSG_DONTWAIT, MSG_MORE, MSG_NOSIGNAL, etc. |
| dest_addr | const struct sockaddr * | Endereço de destino, ou NULL para sockets já conectados. |
| addrlen | socklen_t | Tamanho de `dest_addr`. |
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 | bufconst void * |
| rdx | argumento 3 | lensize_t |
| r10 | argumento 4 | flagsint |
| r8 | argumento 5 | dest_addrconst struct sockaddr * |
| r9 | argumento 6 | addrlensocklen_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.