Freigeben über


Freigegebene Sockets im SPI

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

Es liegt in der Verantwortung des Dienstanbieters, alle Vorgänge auszuführen, die im Quellprozesskontext erforderlich sind, und eine WSAPROTOCOL_INFO Struktur zu erstellen, die erkannt wird, wenn sie anschließend als Parameter angezeigt wird, um WSPSocket-im Kontext der Zielprozesse zu. Das dwProviderReserved Mitglied der WSAPROTOCOL_INFO-Struktur steht für die Verwendung des Dienstanbieters zur Verfügung und kann verwendet werden, um nützliche Kontextinformationen zu speichern, einschließlich eines duplizierten Handles.

Dieser Mechanismus ist für singlethreaded- und preemptive Multithread-Versionen von Windows geeignet.This mechanism is designed to be appropriate for both single-threaded and preemptive multithreaded versions of Windows. Beachten Sie jedoch, dass Sockets in einem bestimmten Prozess ohne Verwendung der WSPDuplicateSocket--Funktion für Threads freigegeben werden können, da ein Socketdeskriptor in allen Threads eines Prozesses gültig ist.

Wie im Abschnitt Descriptor Allocationbeschrieben, müssen IFS-Anbieter WPUModifyIFSHandle- und nicht-IFS-Anbieter WPUCreateSocketHandleaufrufen.

Ein mögliches Szenario für das 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 Prozessbezeichneranforderung und antwortet.
4) Empfängt prozessbezeichner. <==
5) Ruft WSPDuplicateSocket- auf, um eine spezielle WSAPROTOCOL_INFO Struktur zu erhalten.
6) Sendet WSAPROTOCOL_INFO Struktur an das Ziel.
==> 7) Erhält WSAPROTOCOL_INFO Struktur.
8) Ruft WSPSocket- auf, um einen freigegebenen Socketdeskriptor zu erstellen.
9)Verwendet gemeinsam genutzten Sockets für den Datenaustausch.
10) WSPClosesocket- <==