WPUCreateSocketHandle-Funktion (ws2spi.h)
Die WPUCreateSocketHandle-Funktion erstellt ein neues Sockethandle.
Syntax
SOCKET WPUCreateSocketHandle(
[in] DWORD dwCatalogEntryId,
[in] DWORD_PTR dwContext,
[out] LPINT lpErrno
);
Parameter
[in] dwCatalogEntryId
Deskriptor, der den aufrufenden Dienstanbieter identifiziert.
[in] dwContext
Kontextwert, der dem neuen Sockethandle zugeordnet werden soll.
[out] lpErrno
Zeiger auf den Fehlercode.
Rückgabewert
Wenn kein Fehler auftritt, gibt WPUCreateSocketHandle das neue Sockethandle zurück. Andernfalls wird INVALID_SOCKET zurückgegeben, und ein bestimmter Fehlercode ist in lpErrno verfügbar.
Fehlercode | Bedeutung |
---|---|
Es sind nicht genügend Puffer verfügbar, um das neue Sockethandle zu erstellen. |
Hinweise
Die WPUCreateSocketHandle-Funktion erstellt ein neues Sockethandle für den angegebenen Anbieter. Die von WPUCreateSocketHandle erstellten Handles sind nicht von echten Dateisystemhandles zu unterscheiden. Dies ist in zweierlei Hinsicht von Bedeutung. Zunächst übernimmt die Windows Socket 2-Architektur die Umleitung der Dateisystemfunktionen ReadFile und WriteFile an die LPWSPRecv - bzw . LPWSPSend-Funktionen dieses Dienstanbieters. Zweitens unterstützt die Windows Sockets 2-Architektur in Betriebssystemen, die Abschlussports unterstützen, das Zuordnen eines Abschlussports zum Sockethandle und zum Melden überlappender E/A-Vervollständigungen.
Dieses Verfahren ist für Mehrschichtdienstanbieter von besonderem Interesse. Ein Mehrschichtdienstanbieter kann dieses Verfahren anstelle von WPUModifyIFSHandle verwenden, um die Sockethandles zu erstellen, die für den Client verfügbar gemacht werden. Der Vorteil dieses Verfahrens besteht darin, dass alle E/A-Anforderungen, die den Socket betreffen, garantiert über diesen Dienstanbieter gesendet werden können. Dies trifft auch zu, wenn der Client davon ausgeht, dass es sich bei den Sockets um Dateisystemhandles handelt und die Dateisystemfunktionen ReadFile und WriteFile aufruft (obwohl für diese Annahme eine Leistungseinbuße entstehen würde).
Die Garantie, dass alle E/A-Vorgänge diese Ebene durchlaufen, ist eine Anforderung für Ebenen, die den E/A-Stream entweder vor oder nach dem eigentlichen E/A-Vorgang verarbeiten müssen. Das Erstellen von Sockethandles mithilfe von WPUCreateSocketHandle und das Angeben einer geeigneten Dispatchtabelle für Dienstanbieterschnittstellenprozeduren zum Zeitpunkt von WSPStartup stellt sicher, dass die Ebene die Möglichkeit hat, jeden E/A-Vorgang zu starten. Wenn der Client überlappende E/A-Vorgänge anfordert, muss diese Dienstanbieterebene in der Regel auch den Pfad der E/A-Vervollständigungsbenachrichtigung anordnen.
Um zu ermitteln, warum dies der Fall ist, überlegen Sie, was passiert, wenn der Client einen Abschlussport mit dem Sockethandle ordnet, um eine überlappende E/A-Vervollständigungsbenachrichtigung zu erhalten. Der Port ist dem Sockethandle zugeordnet, das von dieser Ebene verfügbar gemacht wird, nicht dem Sockethandle der nächsten Ebene. Es gibt keine Möglichkeit für diese Ebene zu bestimmen, ob ein Abschlussport zugeordnet wurde oder welcher Port es sich handelt. Wenn diese Ebene den E/A-Vorgang der nächsten Ebene aufruft, verwendet sie das Sockethandle der nächsten Ebene. Das Sockethandle der nächsten Ebene weist nicht die gleiche Zuordnung des Abschlussports auf. Die erwartete Vervollständigungsbenachrichtigung des Clients erfolgt nicht ohne zusätzliche Hilfe.
Üblicherweise übernimmt ein Mehrschichtdienstanbieter dies, indem er beim Aufrufen eines E/A-Vorgangs in der nächsten Ebene eine andere überlappende E/A-Struktur und verschiedene überlappende E/A-Parameter ersetzt. Die überlappende Ersatz-E/A-Struktur verweist auf die gespeicherte überlappende Struktur und die Parameter des Clients. Der Aufruf der nächsten Ebene richtet eine Rückrufbenachrichtigung ein. Wenn die Rückrufbenachrichtigung erfolgt, führt diese Ebene alle gewünschten Nachbearbeitungsvorgänge durch, ruft die überlappenden E/A-Informationen ab, die sie im Auftrag des Clients gespeichert hat, verwirft die Ersatzstrukturen und leitet eine entsprechende Abschlussbenachrichtigung an den Client weiter.
Anforderungen
Unterstützte Mindestversion (Client) | Windows 2000 Professional [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows 2000 Server [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | ws2spi.h |