Compartilhar via


Compartilhamento de endereços de transporte

Na maioria das situações, um aplicativo WSK (Kernel winsock) não pode associar 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á associado. 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 associação de um segundo soquete a um endereço de transporte local que já está em uso por outro soquete. Os casos Curinga e Específico especificam se o soquete está associado a um endereço de transporte local curinga ou a um endereço de transporte local específico.

Segunda associação Primeira associação

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

SO_REUSEADDR

SO_EXCLUSIVEADDRUSE

Curinga

Específicas

Curinga

Específicas

Curinga

Específicas

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

Curinga

INUSE

SUCCESS

INUSE

SUCCESS

INUSE

SUCCESS

Específicas

CHECK

INUSE

CHECK

NEGADO

NEGADO

INUSE

SO_REUSEADDR

Curinga

NEGADO

SUCCESS

SUCCESS

SUCCESS

NEGADO

SUCCESS

Específicas

CHECK

NEGADO

SUCCESS

SUCCESS

NEGADO

NEGADO

SO_EXCLUSIVEADDRUSE

Curinga

INUSE

INUSE

INUSE

INUSE

INUSE

INUSE

Específicas

CHECK

INUSE

CHECK

INUSE

NEGADO

INUSE

Os resultados são definidos da seguinte maneira:

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

INUSE
A operação de associação no segundo soquete falha. O subsistema WSK retorna uma status de STATUS_ADDRESS_ALREADY_EXISTS.

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

CHECK
Uma marcar de acesso é executada para determinar se a operação de associação no segundo soquete é bem-sucedida ou falha. Se o acesso for concedido, a associação terá êxito e o subsistema do WSK retornará uma status de STATUS_SUCCESS. Se o acesso for negado, a associação falhará e o subsistema do WSK retornará uma status de STATUS_ACCESS_DENIED.

Nos casos definidos na tabela anterior em que um marcar de acesso é executado, o contexto de segurança do segundo soquete é verificado no 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 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 for criado usando a opção de soquete SO_WSK_SECURITY .

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