Linux x86_64Rede & sockets#41
socket
Cria um novo endpoint de comunicação (socket) e retorna um descritor de arquivo para ele.
Descrição
Ponto de partida de toda comunicação em rede (e de vários mecanismos de IPC local, como AF_UNIX) no Linux: escolhe a família de endereços, o tipo de socket e o protocolo, e devolve um descritor que se comporta como qualquer outro arquivo para read/write/close, além de suportar as chamadas específicas de socket.
Header:
sys/socket.hman 2Assinatura
int socket(int domain, int type, int protocol);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| domain | int | Família de endereços: AF_INET, AF_INET6, AF_UNIX, AF_NETLINK, etc. |
| type | int | SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, etc., opcionalmente combinado com SOCK_NONBLOCK/SOCK_CLOEXEC. |
| protocol | int | Protocolo específico dentro da família/tipo, ou 0 para o padrão (ex.: TCP para SOCK_STREAM+AF_INET). |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | domainint |
| rsi | argumento 2 | typeint |
| rdx | argumento 3 | protocolint |
Valor de retorno
Um novo descritor de arquivo em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EACCES(13)
- Permissão negada.
- EAFNOSUPPORT(97)
- Família de endereços não suportada pelo protocolo.
- EMFILE(24)
- Limite de arquivos abertos do processo atingido.
- ENFILE(23)
- Limite de arquivos abertos no sistema atingido.
- ENOBUFS(105)
- Sem espaço em buffer disponível.
- EPROTONOSUPPORT(93)
- Protocolo não suportado.