Erstellen und Binden von SAN-Sockets
Wenn der Windows Sockets-Switch feststellt, dass er Daten über eine SAN-Verbindung und nicht über den TCP/IP-Stapel weiterleiten kann, fordert er den entsprechenden SAN-Dienstanbieter auf, Optionen für einen Socket zu erstellen, zu binden und festzulegen, auf dem die Daten übertragen werden können.
Der vom SAN-Dienstanbieter erstellte Socket ist ein Begleiter für den Socket, den der TCP/IP-Dienstanbieter auf Anforderung der Anwendung erstellt hat, entweder von oder an die die Daten übertragen werden. Der vom SAN-Dienstanbieter erstellte Begleitsocket verfügt über dieselben Optionen wie der vom TCP/IP-Dienstanbieter erstellte Socket, wenn der SAN-Dienstanbieter diese Optionen unterstützt.
Der Begleitsocket verfügt außerdem über die gleiche IP-Adresse und denselben TCP-Port wie der Socket, der vom TCP/IP-Dienstanbieter erstellt wurde. Die SAN-Daten werden über den Begleitsocket übertragen, der vom SAN-Dienstanbieter erstellt wurde, und nicht über den Socket, der vom TCP/IP-Dienstanbieter erstellt wurde. Der SAN-Socket ist für die Anwendung nicht sichtbar. Aus Sicht der Anwendung werden die Daten auf dem Socket übertragen, den sie für die Datenübertragung erstellt hat.
Hinweis Der Switch verwendet immer den TCP/IP-Dienstanbieter, um Daten über Rohsockets zu übertragen. Der Switch fordert daher nie einen SAN-Dienstanbieter an, einen Rohsocket zu erstellen.
Die folgende Abbildung zeigt eine Übersicht darüber, wie der Windows Sockets-Switch einen Begleitsocket erstellt. In der Sequenz in den folgenden Abschnitten wird die Erstellung eines Begleitsockets ausführlicher beschrieben.
Initiieren der Erstellung eines TCP/IP-Sockets
Nachdem der Windows Sockets-Switch einen WSPSocket-Aufruf empfangen hat, der von einer Anwendung initiiert wurde, ruft der Switch die WSPSocket-Funktion des TCP/IP-Anbieters auf, um den TCP/IP-Anbieter anzufordern, einen Socket zu erstellen.
Der Windows Sockets-Switch gibt den Deskriptor für den erstellten Socket an die Anwendung zurück und speichert diesen Deskriptor in einer privaten Datenstruktur, die dem Socket zugeordnet ist.
Aus Anwendungssicht ist der vom TCP/IP-Anbieter erstellte Socket der Socket, der für Datenübertragungen verwendet wird, unabhängig davon, ob der Switch den TCP/IP-Dienstanbieter oder den SAN-Dienstanbieter verwendet, um die Daten zu übertragen.
Binden eines TCP/IP-Sockets
Der Switch empfängt einen WSPBind-Aufruf , wenn eine Anwendung anfordert, den Socket an einen bestimmten Netzwerkschnittstellencontroller (NIC) oder an die Wildcard-IP-Adresse (0.0.0.0) zu binden. Ein Socket, der an die Wildcard-IP-Adresse gebunden ist, kann auf eingehende Verbindungsanforderungen von allen NICs lauschen.
Hinweis Ab Windows Vista ist die Wildcard-IP-Adresse 0.0.0.0 nicht verfügbar. Wenn der Registrierungsschlüssel IPAutoconfigurationEnabled ab Windows Vista auf den Wert 0 festgelegt ist, ist die automatische IP-Adresszuweisung deaktiviert, und es wird keine IP-Adresse zugewiesen. In diesem Fall zeigt das Befehlszeilentool ipconfig keine IP-Adresse an. Wenn der Schlüssel auf einen Wert ungleich null festgelegt ist, wird automatisch eine IP-Adresse zugewiesen. Dieser Schlüssel kann sich unter den folgenden Pfaden in der Registrierung befinden:
HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Tcpip\Parameters\IPAutoconfigurationEnabled
HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Tcpip\Parameters\Interfaces\GUID\IPAutoconfigurationEnabled
Der Switch leitet diesen Aufruf an den TCP/IP-Dienstanbieter weiter, indem er die WSPBind-Funktion des TCP/IP-Anbieters aufruft.
Dienstanbieterermittlung
Der Switch bestimmt, ob ein SAN-Dienstanbieter für die Datenübertragung auf einem Socket verwendet werden soll, nachdem die Anwendung einen WSPListen - oder WSPConnect-Aufruf an den Switch initiiert hat, wie unter Einrichten einer SAN-Verbindung beschrieben.
Wenn der Switch feststellt, dass er keinen SAN-Dienstanbieter für eine Datenübertragung verwenden kann, leitet der Switch die Datenübertragung über den TCP/IP-Dienstanbieter weiter.
Wenn der Switch einen SAN-Dienstanbieter für den Socket einer Anwendung auswählt, ruft der Switch die WSPSocket-Funktion des SAN-Dienstanbieters auf, um einen Begleitsocket zu erstellen.
Initiieren der Erstellung eines Begleitsockets
Die WSPSocket-Funktion des SAN-Dienstanbieters initialisiert eine interne Datenstruktur, in der Informationen zum Begleitsocket gespeichert werden.
Die WSPSocket-Funktion des SAN-Dienstanbieters muss als Nächstes die WPUCreateSocketHandle-Funktion aufrufen, um einen Socketdeskriptor vom Switch abzurufen.
Der SAN-Dienstanbieter muss den Socketdeskriptor des Switches in seiner internen Datenstruktur für den Begleitsocket speichern und einen eigenen Deskriptor für den Begleitsocket zurückgeben, um den WSPSocket-Aufruf abzuschließen. Der vom SAN-Dienstanbieter zurückgegebene Socketdeskriptor kann ein beliebiger aussagekräftiger Wert sein, z. B. ein Zeiger auf eine private Datenstruktur.
Um einen Vorgang am Socket auszuführen, stellt der Switch den Socketdeskriptor, der vom SAN-Dienstanbieter zurückgegeben wurde, an die entsprechende Funktion des SAN-Dienstanbieters bereit. Ebenso muss der SAN-Dienstanbieter den Socketdeskriptor bereitstellen, der vom Switch im WPUCreateSocketHandle-Aufruf abgerufen wurde, wenn der SAN-Dienstanbieter einen der folgenden Aufrufe durchführt:
WPUQuerySocketHandleContext
WPUCloseSocketHandle
WPUCompleteOverlappedRequest
Binden eines Begleitsockets
Wenn die WSPSocket-Funktion eines SAN-Dienstanbieters erfolgreich abgeschlossen wird, ruft der Switch sofort die WSPBind-Funktion des SAN-Dienstanbieters auf, um dem Socket eine lokale IP-Adresse und einen TCP-Port zuzuweisen.
Der Switch weist dem SAN-Socket die gleiche IP-Adresse und denselben TCP-Port zu, die dem socket zugewiesen wurde, der vom TCP/IP-Anbieter erstellt wurde. Der SAN-Dienstanbieter muss diese TCP/IP-Adresse in sein natives Format übersetzen.
Der Switch stellt eine vollqualifizierte IP-Adresse und einen TCP-Port (d. h. werte ungleich null) an die WSPBind-Funktion des SAN-Dienstanbieters bereit, es sei denn, eine Anwendung wird aufgefordert, auf eingehende Verbindungen von allen NICs zu lauschen. Im späteren Fall stellt der Switch die IP-Adresse des Wildcards an die WSPBind-Funktion des SAN-Dienstanbieters bereit.
Festlegen von Optionen für einen Begleitsocket
- Wenn die Anwendung Socketoptionen angegeben hat, speichert der Switch diese Optionen. Nach dem Erstellen des SAN-Sockets ruft der Switch die WSPSetSockOpt-Funktion des SAN-Dienstanbieters für jede unterstützte Option auf, die von der Anwendung angegeben wurde, um diese Optionen sofort für den SAN-Socket festzulegen.
Fehler bei einem Begleitsocketaufruf
- Wenn ein SAN-Dienstanbieter einen der vorherigen Aufrufe seiner Funktionen WSPSocket, WSPBind oder WSPSetSockOpt fehlschlägt , ruft der Switch die WSPCloseSocket-Funktion des SAN-Dienstanbieters auf, um den SAN-Socket zu zerstören. Der Switch verwendet dann den TCP/IP-Anbieter, um den Anwendungssocket weiter zu warten. Beachten Sie, dass der Switch, nachdem der Switch eine Verbindung mit einem SAN-Dienstanbieter hergestellt hat, den TCP/IP-Anbieter nicht verwenden kann, um den Socket der Anwendung zu bedienen. In diesem Fall gibt der Schalter den entsprechenden Fehler an die Anwendung zurück.
Verbinden des Begleitsockets
- Nachdem der Switch den Begleitsocket eingerichtet hat, ruft der Switch entweder die WSPListen - oder WSPConnect-Funktion für den SAN-Dienstanbieter auf, um den Vorgang auszuführen, der dazu geführt hat, dass der SAN-Dienstanbieter den Socket ursprünglich eingerichtet hat. Wenn beispielsweise eine Anwendung ursprünglich angefordert hat, auf eingehende Verbindungen zu lauschen, ruft der Switch die WSPListen-Funktion des SAN-Dienstanbieters auf.