Partilhar via


Compartilhamento de endereços de transporte

Na maioria das situações, um aplicativo Winsock Kernel (WSK) não pode vincular um soquete a um endereço de transporte local que já está em uso por outro soquete. Os aplicativos WSK podem usar as opções de soquete SO_EXCLUSIVEADDRUSE e SO_REUSEADDR para controlar o compartilhamento do endereço de transporte local ao qual um soquete está vinculado. Nenhuma dessas opções de soquete é definida para um soquete por padrão. Para obter mais informações sobre como definir opções de soquete, consulte Executando operações de controle em um soquete.

A tabela a seguir mostra o resultado da vinculação de um segundo soquete a um endereço de transporte local que já está em uso por outro soquete. Os casos Wildcard e Specific especificam se o soquete está vinculado a um endereço local de transporte comodín ou a um endereço local de transporte específico.

Segunda ligação Primeira ligação

Sem opções de soquete (padrão)

SO_REUSEADDR

SO_EXCLUSIVEADDRUSE

Joker

Específico

Curinga

Específico

Curinga

Específico

Sem opções de soquete (padrão)

Curinga

INUTILIZAÇÃO

SUCESSO

INUTILIZAÇÃO

SUCESSO

INUTILIZAÇÃO

SUCESSO

Específico

VERIFICAR

INUTILIZAÇÃO

VERIFICAR

NEGADO

NEGADO

INUTILIZAÇÃO

SO_REUSEADDR

Curinga

NEGADO

SUCESSO

SUCESSO

SUCESSO

NEGADO

SUCESSO

Específico

VERIFICAR

NEGADO

SUCESSO

SUCESSO

NEGADO

NEGADO

SO_EXCLUSIVEADDRUSE

Carta Curinga

INUTILIZAÇÃO

INUTILIZAÇÃO

INUTILIZAÇÃO

INUTILIZAÇÃO

INUTILIZAÇÃO

INUTILIZAÇÃO

Específico

VERIFICAR

INUTILIZAÇÃO

VERIFICAR

INUTILIZAÇÃO

NEGADO

INUTILIZAÇÃO

Os resultados são definidos da seguinte forma:

SUCESSO
A operação de ligação para o segundo soquete é bem-sucedida. O subsistema WSK retorna um status de STATUS_SUCCESS.

INUTILIZAÇÃO
A operação de ligação no segundo soquete falha. O subsistema WSK retorna um status de STATUS_ADDRESS_ALREADY_EXISTS.

NEGADO
A operação de ligação no segundo soquete falha. O subsistema WSK retorna um status de STATUS_ACCESS_DENIED.

VERIFICAÇÃO
Uma verificação de acesso é executada para determinar se a operação de ligação no segundo soquete é bem-sucedida ou falha. Se o acesso for concedido, a associação será bem-sucedida e o subsistema WSK retornará um status de STATUS_SUCCESS. Se o acesso for negado, a ligação falhará e o subsistema WSK retornará um status de STATUS_ACCESS_DENIED.

Nos casos definidos na tabela anterior em que uma verificação de acesso é executada, o contexto de segurança do segundo soquete é verificado em relação ao descritor de segurança do primeiro soquete.

  • O contexto de segurança de um soquete é determinado pelos parâmetros OwningProcess e OwningThread que são passados para a função WskSocket ou a função WskSocketConnect quando o soquete é criado. Se nenhum processo ou thread específico for especificado quando o soquete for criado, o contexto de segurança do processo que criou o soquete será usado.

  • O descritor de segurança de um soquete é especificado pelo parâmetro SecurityDescriptor que é passado para a função WskSocket ou para a função WskSocketConnect quando o soquete é criado. Se nenhum descritor de segurança específico for especificado, o subsistema WSK usará um descritor de segurança padrão que não permite o compartilhamento de endereços de transporte. Um descritor de segurança também pode ser aplicado a um soquete depois que o soquete foi criado usando a opção de soquete SO_WSK_SECURITY.

Se os dois soquetes estiverem vinculados a dois endereços de transporte local específicos diferentes, não haverá compartilhamento de nenhum dos endereços de transporte. Nessa situação, a segunda operação de ligação sempre será concluída com êxito.