Linux x86_64Rede & sockets#54
setsockopt
Define uma opção de socket em um nível de protocolo específico.
Descrição
Ajusta comportamentos como timeouts (SO_RCVTIMEO), reuso de endereço (SO_REUSEADDR), tamanho de buffers (SO_RCVBUF/SO_SNDBUF), keep-alive TCP, opções de multicast, entre centenas de outras espalhadas por diferentes níveis de protocolo (SOL_SOCKET, IPPROTO_TCP, IPPROTO_IP, ...).
Header:
sys/socket.hman 2Assinatura
int setsockopt(
int sockfd,
int level,
int optname,
const void * optval,
socklen_t optlen
);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| sockfd | int | Descritor do socket. |
| level | int | Nível de protocolo da opção: SOL_SOCKET, IPPROTO_TCP, IPPROTO_IP, etc. |
| optname | int | Nome da opção dentro do nível. |
| optval | const void * | Novo valor da opção. |
| optlen | socklen_t | Tamanho de `optval`. |
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 | levelint |
| rdx | argumento 3 | optnameint |
| r10 | argumento 4 | optvalconst void * |
| r8 | argumento 5 | optlensocklen_t |
Valor de retorno
0 em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EBADF(9)
- Descritor de arquivo inválido.
- EFAULT(14)
- Endereço de memória inválido (ponteiro fora do espaço de endereçamento válido).
- EINVAL(22)
- Argumento inválido.
- ENOPROTOOPT(92)
- Opção de protocolo indisponível.
- ENOTSOCK(88)
- Operação de socket em descritor que não é um socket.