Linux x86_64Rede & sockets#53
socketpair
Cria um par de sockets já conectados entre si, tipicamente AF_UNIX, para IPC local.
Descrição
Forma comum de estabelecer um canal bidirecional entre processo pai e filho após um `fork`, sem precisar de bind/listen/accept.
Header:
sys/socket.hman 2Assinatura
int socketpair(int domain, int type, int protocol, int[2] sv);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| domain | int | Família de endereços, geralmente AF_UNIX. |
| type | int | SOCK_STREAM ou SOCK_DGRAM, opcionalmente com SOCK_NONBLOCK/SOCK_CLOEXEC. |
| protocol | int | Geralmente 0. |
| sv | int[2] | Recebe os dois descritores de socket conectados entre si. |
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 |
| r10 | argumento 4 | svint[2] |
Valor de retorno
0 em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- 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.
- EOPNOTSUPP(95)
- Operação não suportada nesse socket/arquivo (também ENOTSUP).