Blockieren von Aufrufen für ein SAN
Der Windows Sockets-Switch verarbeitet blockierende Aufrufe und das Abbrechen solcher Aufrufe intern oder leitet sie an den TCP/IP-Dienstanbieter weiter. Der Switch ruft nie eine WSPCancelBlockingCall-Funktion für einen SAN-Dienstanbieter auf, um eine derzeit ausgeführte blockierende Anforderung abzubrechen. Daher ist kein SAN-Dienstanbieter erforderlich, um eine WSPCancelBlockingCall-Funktion zu implementieren.
Der Switch verarbeitet die folgenden blockierenden Anforderungen und entsprechenden Abbrüche wie folgt:
Wenn eine Anwendung anfordert, einen SAN-Socket mit einer bestimmten Zieladresse im Blockiermodus zu verbinden, empfängt der Switch einen blockierenden WSPConnect-Aufruf . Der Switch leitet die Verbindungsanforderung im Nichtblockierungsmodus an die WSPConnect-Funktion des entsprechenden SAN-Dienstanbieters weiter. Wenn der Switch diese Verbindungsanforderung aus irgendeinem Grund abbrechen muss, ruft er die WSPCloseSocket-Funktion des SAN-Dienstanbieters auf. Der SAN-Dienstanbieter muss die Verbindungsanforderung umgehend abbrechen und Ressourcen für den Socket freigeben.
Wenn der Switch eine blockierende Anforderung empfängt, die von einer Anwendung zum Ausführen eines Datenübertragungsvorgangs auf einem SAN-Socket initiiert wurde, leitet er die Datenübertragungsanforderung überlappend (nicht blockierend) an den entsprechenden SAN-Dienstanbieter weiter. Wenn der Switch beispielsweise einen synchronen (blockierenden) WSPSend-Aufruf empfängt, ruft er die WSPSend-Funktion des entsprechenden SAN-Dienstanbieters in einer überlappenden (nicht blockierenden) Weise auf. Wenn die Anwendung den Datenübertragungsvorgang später abbricht und der Switch die Kontrolle über den Puffer der Anwendung hat, schließt der Switch die Anforderung der Anwendung mit einem Fehler status ab. Wenn der Puffer der Anwendung an einem ausstehenden RDMA-Vorgang beteiligt ist, wartet der Switch auf den Abschluss des Vorgangs. Wenn eine RDMA-Übertragung zu lange dauert, ruft der Switch die WSPCloseSocket-Funktion des entsprechenden SAN-Dienstanbieters auf, um die Verbindung abgebrochen zu schließen, wodurch die Fertigstellung erzwungen wird.
Hinweis Wenn eine Anwendung einen blockierenden Aufruf abbricht, kann sie sich nicht darauf verlassen, dass eine Verbindung beibehalten wird. Nur der WSPCloseSocket-Aufruf ist nach dem Abbrechen einer blockierenden Anforderung auf dem Socket garantiert erfolgreich. Weitere Informationen finden Sie in der Dokumentation zu Windows Sockets SPI im Microsoft Windows SDK.