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.