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.