Freigegebene Sockets in der SPI

Die Socketfreigabe zwischen Prozessen in Windows Sockets wird wie folgt implementiert. Ein Quellprozess ruft WSPDuplicateSocket auf, um eine spezielle WSAPROTOCOL _ INFO-Struktur abzurufen. Dabei wird ein IPC-Mechanismus (Interprocess Communications) verwendet, um den Inhalt dieser Struktur an einen Zielprozess zu übergeben. Der Zielprozess verwendet dann die WSAPROTOCOL _ INFO-Struktur in einem Aufruf von WSPSocket. Der von dieser Funktion zurückgegebene Socketdeskriptor ist ein zusätzlicher Socketdeskriptor für einen zugrunde liegenden Socket, der daher freigegeben wird.

Es liegt in der Verantwortung des Dienstanbieters, alle vorgänge auszuführen, die im Kontext des Quellprozesses erforderlich sind, und eine WSAPROTOCOL _ INFO-Struktur zu erstellen, die erkannt wird, wenn sie anschließend als Parameter für WSPSocket im Kontext der Zielprozesse angezeigt wird. Der dwProviderReserved-Member der WSAPROTOCOL _ INFO-Struktur ist für die Verwendung durch den Dienstanbieter verfügbar und kann verwendet werden, um alle nützlichen Kontextinformationen zu speichern, einschließlich eines duplizierten Handles.

Dieser Mechanismus ist sowohl für Singlethreadversionen als auch präemptive Multithreadversionen von Windows geeignet. Beachten Sie jedoch, dass Sockets für Threads in einem bestimmten Prozess freigegeben werden können, ohne die WSPDuplicateSocket-Funktion zu verwenden, da ein Socketdeskriptor in allen Threads eines Prozesses gültig ist.

Wie im Abschnitt Deskriptorzuordnungbeschrieben, müssen IFS-Anbieter beim Zuordnen neuer Socketdeskriptoren WPUModifyIFSHandle und Nicht-IFS-Anbieter WPUCreateSocketHandleaufrufen.

Ein mögliches Szenario zum Einrichten und Verwenden eines freigegebenen Sockets in einem Übergabemodus ist in der folgenden Tabelle dargestellt.

Quellprozess IPC Zielprozess
1) WSPSocket, WSPConnect
2) Fordert den Zielprozessbezeichner an. ==>
3) Empfängt die Prozessbezeichneranforderung und antwortet.
4) Empfängt den Prozessbezeichner. <==
5) Ruft WSPDuplicateSocket auf, um eine spezielle WSAPROTOCOL _ INFO-Struktur abzurufen.
6) Sendet die WSAPROTOCOL _ INFO-Struktur an das Ziel.
==> 7) Empfängt die WSAPROTOCOL _ INFO-Struktur.
8) Ruft WSPSocket auf, um einen freigegebenen Socketdeskriptor zu erstellen.
9)Verwendet freigegebenen Socket für den Datenaustausch.
10) WSPClosesocket <==