ligar Subroutine
Propósito
Liga um nome a um soquete.
Biblioteca
Biblioteca C Padrão (libc.a)
Sintaxe
#include <sys/socket.h>
Descrição
O subroutine ligar designa um parâmetro Nome para um soquete sem nome. Soquetes criados pela subroutine socket são inéditos; eles são identificados apenas por sua família de endereço. Subroutines que conectam soquetes designam nomes ou usam soquetes sem nome.
Para um soquete de domínio UNIX, uma chamada de conexão só é bem-sucedida se o processo que chama a conexão tiver permissões de leitura e gravação no arquivo de soquete criado pela chamada de ligação. As permissões são determinadas pelo valor umask do processo que criou o arquivo.
Um programa de aplicativos pode recuperar o nome de socket atribuído com a subroutine getsockname .
Os aplicativos socket podem ser compilados com COMPAT_43 definidos. Isso torna a estrutura sockaddr BSD 4.3 compatível. Para obter mais detalhes, consulte o arquivo socket.h
Ligar um nome no domínio UNIX cria um socket no sistema de arquivos que deve ser excluído pelo caller quando ele não for mais necessário.
Parâmetros
| Item | Descrição |
|---|---|
| Soquete | Especifica o descritor de socket (um inteiro) do soquete a ser ligado. |
| Nome | Aponta para uma estrutura de endereço que especifica o endereço para o qual o soquete deve estar ligado. O arquivo /usr/include/sys/socket.h define a estrutura de endereço sockaddr . A estrutura sockaddr contém um identificador específico para o formato de endereço e protocolo fornecido na subroutine socket . |
| NameLength | Especifica o comprimento da estrutura de endereço de soquete. |
Valores De Retorno
Após a conclusão bem-sucedida, a subroutine ligar retorna um valor de 0.
Se a subroutine ligar não for bem sucedida, o manipulador de subroutine executa as seguintes ações:
- Retorna um valor de -1 para o programa de chamada.
- Move um código de erro, indicando o erro específico, na variável global errno . Para mais explicações sobre a variável errno consulte "Erro de Classe de Notificação de Notificação" em Conceitos De Programação De Comunicações.
Códigos De Erro
A subroutine ligar não é bem sucedida se ocorrer algum dos seguintes erros:
| Valor | Descrição |
|---|---|
| EACCES | O endereço solicitado é protegido, e o usuário atual não tem permissão para acessá-lo. |
| EADDRINUSE | O endereço especificado já está em uso. |
| EADDRNOTAVAIL | O endereço especificado não está disponível a partir da máquina local. |
| EAFNOSUPPORT | O endereço especificado não é um endereço válido para a família de endereço do soquete especificado. |
| EAGAIN | As portas transientes já estão em uso e não estão disponíveis. |
| EBADF | O parâmetro Soquete não é válido. |
| EDESTADDRREQ | O argumento endereço é um ponteiro nulo. |
| EFAULT | O parâmetro Address não está em uma parte gravável do espaço de UserAddress |
| EINVAL | O soquete já está ligado a um endereço. |
| ENOBUF | Espaço de buffer insuficiente disponível. |
| ENODEV | O dispositivo especificado não existe. |
| ENOTSOCK | O parâmetro Soquete refere-se a um arquivo, não a um soquete. |
| EOPNOTSUPP | O soquete referenciado por Soquete parâmetro não suporta ligação de endereço. |
Exemplos
O fragmento de programa a seguir ilustra o uso da subroutine ligar para ligar o nome "/tmp/zan/" a um soquete de domínio UNIX .
#include <sys/un.h> .
.
.
struct sockaddr_un addr;
.
.
.
strcpy(addr.sun_path, "/tmp/zan/");
addr.sun_len = strlen(addr.sun_path);
addr.sun_family = AF_UNIX;
bind(s,(struct sockaddr*)&addr, SUN_LEN(&addr));