other languages
other sections
UNIX(7) | Manual do Programador Linux | UNIX(7) |
NOME¶
unix, PF_UNIX, AF_UNIX, PF_LOCAL, AF_LOCAL - Sockets para comunicação local interprocessos.SINOPSE¶
#include <sys/socket.h>DESCRIÇÃO¶
A família de sockets PF_UNIX (também conhecida como PF_LOCAL ) é usada para comunicação eficiente entre processos na mesma máquina. Sockets Unix podem ser anônimos (criados pelo socketpair(2)) ou associados com um arquivo do tipo do socket. O Linux também suporta um espaço de nomes abstrato, que é independente do sistema de arquivos.FORMATO DE ENDEREÇO¶
Um endereço Unix é definido como um nome de arquivo no sistema de arquivos ou como uma string única no espaço de nomes abstrato. Os sockets criados pelo socketpair(2) são anônimos. Para sockets não anônimos, o endereço-alvo pode ser setado usando-se connect(2). O endereço local pode ser setado usando-se bind(2). Quando um socket é conectado e ainda não tem um endereço local, um endereço único será gerado automaticamente no espaço de nomes abstrato.#define UNIX_PATH_MAX 108 struct sockaddr_un { sa_family_t sun_family; /* AF_UNIX */ char sun_path[UNIX_PATH_MAX]; /* caminho de diretório */ };
OPÇÕES DE SOCKET¶
Por razões históricas, essas opções de socket são especificadas com um tipo SOL_SOCKET mesmo sendo específicos do PF_UNIX. Eles podem ser selecionados com setsockopt(2) e lidos com getsockopt(2) especificando-se SOL_SOCKET como a família de socket.MENSAGENS ANCILARES¶
Por razões históricas, esses tipos de mensagens ancilares são especificados com um tipo SOL_SOCKET mesmo sendo específicos do PF_UNIX. Para enviá-los, setar o campo cmsg_level da estrutura cmsghdr com SOL_SOCKET, e o campo cmsg_type com o tipo. Para mais informações, veja cmsg(3).- SCM_RIGHTS
- Envia ou recebe um conjunto de descritores de arquivo de
outro processo. A porção de dados contém uma matriz de
inteiros com os descritores de arquivos. Os descritores de arquivo
passados se comportam como se tivessem sido criados com dup(2).
- SCM_CREDENTIALS
- Envia ou recebe credenciais do unix. Isto pode ser usado
para autenticação. As credenciais são passadas como uma
mensagem ancilar de struct ucred
struct ucred { pid_t pid; /* "process id" do processo de envio */ uid_t uid; /* "user id" do processo de envio */ gid_t gid; /* "group id" do processo de envio */ };
VERSÕES¶
SCM_CREDENTIALS e o espaço de nomes abstrato foram introduzidos com o Linux 2.2 e não deve ser usados em programas portáveis.NOTAS¶
Na implementação Linux, os sockets que são visíveis no sistema de arquivos respeitam as permissões do diretório onde eles estão. Seus proprietários, grupo e permissões podem ser alterados. A criação de um novo socket falhará se o processo não tiver permissão de escrita e busca (execução) no diretório no qual o socket é criado. A conexão com o objeto do socket requer permissão de leitura/escrita. Este comportamento difere de muitos sistemas derivados do BSD, que ignoram permissões para sockets Unix. Programas portáveis não devem confiar nessa implementação, por segurança.ERROS¶
- ENOMEM
- Sem memória.
- ECONNREFUSED
- connect(2) foi chamado com um objeto de socket que
não está escutando. Isto pode acontecer quando um socket remoto
não existe, ou o nome de arquivo não é um socket.
- EINVAL
- Um argumento inválido foi passado. Uma causa comum
é a perda de configuração do AF_UNIX no campo sun_type do
endereço passado, ou o socket está em um estado inválido
para a operação aplicada.
- EOPNOTSUPP
- Uma operação de stream foi chamada em um socket
não orientado a stream, ou tentou usar uma opção de dados
fora de banda.
- EPROTONOSUPPORT
- O protocolo passado não é PF_UNIX.
- ESOCKTNOSUPPORT
- Tipo de socket desconhecido.
- EPROTOTYPE
- O socket remoto não encontra o tipo de socket local
(SOCK_DGRAM vs. SOCK_STREAM).
- EADDRINUSE
- O endereço local selecionado já foi pego, ou o
objeto de socket do sistema de arquivo já existe.
- EISCONN
- connect(2) foi chamado em um socket já
conectado, ou um endereço-alvo foi especificado em um socket
conectado.
- ENOTCONN
- A operação de socket precisa de um
endereço-alvo, mas o socket não está conectado.
- ECONNRESET
- O socket remoto foi encerrado inesperadamente.
- EPIPE
- O socket remoto foi encerrado em um socket de stream. Se habilitado, um SIGPIPE é enviado também. Isto pode ser evitado pela passagem da flag MSG_NOSIGNAL para sendmsg(2) ou para recvmsg(2).
- EFAULT
- O endereço de memória do usuário não era válida.
- EPERM
- O remetente passou credenciais inválidas na struct ucred.
VEJA TAMBÉM¶
recvmsg(2), sendmsg(2), socket(2), socketpair(2), cmsg(3), socket(7)CRÉDITOS¶
Esta página de manual foi escrita por Andi Kleen.TRADUZIDO POR LDP-BR em 21/08/2000.¶
Rubens de Jesus Nogueira <darkseid99@usa.net> (tradução) Xxxxxxx Xxxxxxxxx Xxxxxxxx <xxxxxxxxx@xxxxxxx> (revisão)07/05/1999 | Página do Manual Linux |