Partager via


Partage d’adresses de transport

Dans la plupart des cas, une application WSK (Winsock Kernel) ne peut pas lier un socket à une adresse de transport locale déjà utilisée par un autre socket. Les applications WSK peuvent utiliser les options de socket SO_EXCLUSIVEADDRUSE et SO_REUSEADDR pour contrôler le partage de l’adresse de transport locale à laquelle un socket est lié. Aucune de ces options de socket n’est définie pour un socket par défaut. Pour plus d’informations sur la définition des options de socket, consultez Exécution d’opérations de contrôle sur un socket.

Le tableau suivant montre le résultat de la liaison d’un deuxième socket à une adresse de transport locale déjà utilisée par un autre socket. Les cas Caractère générique et Spécifique spécifient si le socket est lié à une adresse de transport locale générique ou à une adresse de transport locale spécifique.

Deuxième liaison Première liaison

Aucune option de socket (par défaut)

SO_REUSEADDR

SO_EXCLUSIVEADDRUSE

Caractère générique

Spécifique

Caractère générique

Spécifique

Caractère générique

Spécifique

Aucune option de socket (par défaut)

Caractère générique

INUSE

SUCCESS

INUSE

SUCCESS

INUSE

SUCCESS

Spécifique

CHECK

INUSE

CHECK

REFUSÉ

REFUSÉ

INUSE

SO_REUSEADDR

Caractère générique

REFUSÉ

SUCCESS

SUCCESS

SUCCESS

REFUSÉ

SUCCESS

Spécifique

CHECK

REFUSÉ

SUCCESS

SUCCESS

REFUSÉ

REFUSÉ

SO_EXCLUSIVEADDRUSE

Caractère générique

INUSE

INUSE

INUSE

INUSE

INUSE

INUSE

Spécifique

CHECK

INUSE

CHECK

INUSE

REFUSÉ

INUSE

Les résultats sont définis comme suit :

SUCCÈS
L’opération de liaison pour le deuxième socket réussit. Le sous-système WSK retourne une status de STATUS_SUCCESS.

INUSE
L’opération de liaison sur le deuxième socket échoue. Le sous-système WSK retourne une status de STATUS_ADDRESS_ALREADY_EXISTS.

REFUSÉ
L’opération de liaison sur le deuxième socket échoue. Le sous-système WSK retourne une status de STATUS_ACCESS_DENIED.

VÉRIFIER
Une case activée d’accès est effectuée pour déterminer si l’opération de liaison sur le deuxième socket réussit ou échoue. Si l’accès est accordé, la liaison réussit et le sous-système WSK retourne une status de STATUS_SUCCESS. Si l’accès est refusé, la liaison échoue et le sous-système WSK retourne une status de STATUS_ACCESS_DENIED.

Dans les cas définis dans le tableau précédent où une case activée d’accès est effectuée, le contexte de sécurité du deuxième socket est vérifié par rapport au descripteur de sécurité du premier socket.

  • Le contexte de sécurité d’un socket est déterminé par les paramètres OwningProcess et OwningThread qui sont passés à la fonction WskSocket ou à la fonction WskSocketConnect lors de la création du socket. Si aucun processus ou thread spécifique n’est spécifié lors de la création du socket, le contexte de sécurité du processus qui a créé le socket est utilisé.

  • Le descripteur de sécurité d’un socket est spécifié par le paramètre SecurityDescriptor qui est transmis à la fonction WskSocket ou à la fonction WskSocketConnect lors de la création du socket. Si aucun descripteur de sécurité spécifique n’est spécifié, le sous-système WSK utilise un descripteur de sécurité par défaut qui n’autorise pas le partage d’adresses de transport. Un descripteur de sécurité peut également être appliqué à un socket une fois le socket créé à l’aide de l’option SO_WSK_SECURITY socket.

Si les deux sockets sont liés à deux adresses de transport locales spécifiques différentes, aucune des deux adresses de transport n’est partagée. Dans ce cas, la deuxième opération de liaison se termine toujours correctement.