Freigeben von Transportadressen
In den meisten Fällen kann eine WSK-Anwendung (Winsock Kernel) keinen Socket an eine lokale Transportadresse binden, die bereits von einem anderen Socket verwendet wird. WSK-Anwendungen können die Optionen SO_EXCLUSIVEADDRUSE und SO_REUSEADDR Sockets verwenden, um die Freigabe der lokalen Transportadresse zu steuern, an die ein Socket gebunden ist. Keine dieser Socketoptionen ist standardmäßig für einen Socket festgelegt. Weitere Informationen zum Festlegen von Socketoptionen finden Sie unter Ausführen von Steuerungsvorgängen für einen Socket.
Die folgende Tabelle zeigt das Ergebnis der Bindung eines zweiten Sockets an eine lokale Transportadresse, die bereits von einem anderen Socket verwendet wird. Die Fälle "Wildcard" und "Specific " geben an, ob der Socket an eine Lokale Transportadresse oder eine bestimmte lokale Transportadresse gebunden ist.
Zweite Bindung | Erste Bindung | ||||||
---|---|---|---|---|---|---|---|
Keine Socketoptionen (Standard) |
SO_REUSEADDR |
SO_EXCLUSIVEADDRUSE |
|||||
Platzhalter |
Spezifisch |
Platzhalter |
Spezifisch |
Platzhalter |
Spezifisch |
||
Keine Socketoptionen (Standard) |
Platzhalter |
INUSE |
SUCCESS |
INUSE |
SUCCESS |
INUSE |
SUCCESS |
Spezifisch |
CHECK |
INUSE |
CHECK |
VERWEIGERT |
VERWEIGERT |
INUSE |
|
SO_REUSEADDR |
Platzhalter |
VERWEIGERT |
SUCCESS |
SUCCESS |
SUCCESS |
VERWEIGERT |
SUCCESS |
Spezifisch |
CHECK |
VERWEIGERT |
SUCCESS |
SUCCESS |
VERWEIGERT |
VERWEIGERT |
|
SO_EXCLUSIVEADDRUSE |
Platzhalter |
INUSE |
INUSE |
INUSE |
INUSE |
INUSE |
INUSE |
Spezifisch |
CHECK |
INUSE |
CHECK |
INUSE |
VERWEIGERT |
INUSE |
Die Ergebnisse werden wie folgt definiert:
ERFOLG
Der Bindungsvorgang für den zweiten Socket ist erfolgreich. Das WSK-Subsystem gibt eine status von STATUS_SUCCESS zurück.
INUSE
Der Bindungsvorgang für den zweiten Socket schlägt fehl. Das WSK-Subsystem gibt eine status von STATUS_ADDRESS_ALREADY_EXISTS zurück.
VERWEIGERT
Der Bindungsvorgang für den zweiten Socket schlägt fehl. Das WSK-Subsystem gibt eine status von STATUS_ACCESS_DENIED zurück.
CHECK
Eine Zugriffsüberprüfung wird durchgeführt, um festzustellen, ob der Bindungsvorgang für den zweiten Socket erfolgreich ist oder fehlschlägt. Wenn der Zugriff gewährt wird, ist die Bindung erfolgreich, und das WSK-Subsystem gibt eine status von STATUS_SUCCESS zurück. Wenn der Zugriff verweigert wird, schlägt die Bindung fehl, und das WSK-Subsystem gibt eine status von STATUS_ACCESS_DENIED zurück.
In den in der vorherigen Tabelle definierten Fällen, in denen eine Zugriffsüberprüfung durchgeführt wird, wird der Sicherheitskontext des zweiten Sockets mit dem Sicherheitsdeskriptor des ersten Sockets überprüft.
Der Sicherheitskontext eines Sockets wird durch die Parameter OwningProcess und OwningThread bestimmt, die entweder an die WskSocket-Funktion oder die WskSocketConnect-Funktion übergeben werden, wenn der Socket erstellt wird. Wenn beim Erstellen des Sockets kein bestimmter Prozess oder Thread angegeben wird, wird der Sicherheitskontext des Prozesses verwendet, der den Socket erstellt hat.
Der Sicherheitsdeskriptor eines Sockets wird durch den SecurityDescriptor-Parameter angegeben, der entweder an die WskSocket-Funktion oder die WskSocketConnect-Funktion übergeben wird, wenn der Socket erstellt wird. Wenn kein spezifischer Sicherheitsdeskriptor angegeben ist, verwendet das WSK-Subsystem einen Standardsicherheitsdeskriptor, der keine Freigabe von Transportadressen zulässt. Ein Sicherheitsdeskriptor kann auch auf einen Socket angewendet werden, nachdem der Socket mithilfe der Option SO_WSK_SECURITY Socket erstellt wurde.
Wenn die beiden Sockets an zwei verschiedene spezifische lokale Transportadressen gebunden sind, erfolgt keine gemeinsame Nutzung einer Transportadresse. In diesem Fall wird der zweite Bindungsvorgang immer erfolgreich abgeschlossen.