ligar Subroutine

Propósito

Liga um nome a um soquete.

Biblioteca

Biblioteca C Padrão (libc.a)

Sintaxe

#include <sys/socket.h>
int bind ( Socket,  Name,  NameLength)
int Socket;
const struct sockaddr *Name;
socklen_t NameLength;

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.

Nota: Quando você ativa IPv6 para um aplicativo, os endereços IPv4 também são suportados. Você pode usar um socket AF_INET6 para enviar e receber os pacotes IPv4 e IPv6 porque os soquetes AF_INET6 são capazes de manipular a comunicação com os hosts IPv4 e IPv6 . No entanto, você deve converter o formato de endereço dos endereços IPv4 que foram previamente passados para as chamadas socket para o formato de endereço IPv4-mapped IPv6 . Por exemplo, deve-se converter 10.1.1.1 na estrutura sockaddr_in para ::ffff:10.1.1.1 na estrutura sockaddr_in6 .

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));