PFN_WSK_CLOSE_SOCKET Rückruffunktion (wsk.h)

Die WskCloseSocket-Funktion schließt einen Socket und gibt alle zugeordneten Ressourcen frei.

Syntax

PFN_WSK_CLOSE_SOCKET PfnWskCloseSocket;

NTSTATUS PfnWskCloseSocket(
  [in]      PWSK_SOCKET Socket,
  [in, out] PIRP Irp
)
{...}

Parameter

[in] Socket

Ein Zeiger auf eine WSK_SOCKET-Struktur , die das Socketobjekt für den zu schließenden Socket angibt.

[in, out] Irp

Ein Zeiger auf einen vom Aufrufer zugewiesenen IRP, den das WSK-Subsystem verwendet, um den Schließvorgang asynchron abzuschließen. Weitere Informationen zur Verwendung von IRPs mit WSK-Funktionen finden Sie unter Verwenden von IRPs mit Winsock-Kernelfunktionen.

Rückgabewert

WskCloseSocket gibt einen der folgenden NTSTATUS-Codes zurück:

Rückgabecode Beschreibung
STATUS_SUCCESS
Der Socket wurde erfolgreich geschlossen. Die IRP wird erfolgreich status abgeschlossen.
STATUS_PENDING
Das WSK-Subsystem konnte den Socket nicht sofort schließen. Das WSK-Subsystem schließt das IRP ab, nachdem der Socket geschlossen wurde. Die status des Schließen-Vorgangs wird im Feld IoStatus.Status des IRP zurückgegeben.
Andere status Codes
Ein Fehler ist aufgetreten. Die IRP wird mit einem Fehler status abgeschlossen.

Hinweise

Vor dem Aufrufen der WskCloseSocket-Funktion muss eine WSK-Anwendung sicherstellen, dass keine anderen Funktionsaufrufe für eine der Funktionen des Sockets, einschließlich aller Erweiterungsfunktionen, in einem der anderen Threads der Anwendung ausgeführt werden. Beispielsweise darf eine WSK-Anwendung WskCloseSocket nicht in einem Socket in einem Thread aufrufen, während die Anwendung WskSend für denselben Socket in einem anderen Thread aufruft. Alle laufenden Aufrufe der Socketfunktionen müssen die Steuerung an die WSK-Anwendung zurückgeben, bevor WskCloseSocket aufgerufen wird , um den Socket zu schließen. Eine WSK-Anwendung kann jedoch WskCloseSocket aufrufen, wenn IRPs aus früheren Aufrufen der Funktionen des Sockets ausstehen, die noch nicht abgeschlossen wurden.

Der Aufruf der WskCloseSocket-Funktion bewirkt, dass das WSK-Subsystem alle ausstehenden IRPs von vorherigen Aufrufen der Socketfunktionen abbricht und abschließt. Das WSK-Subsystem stellt außerdem sicher, dass alle laufenden Ereignisrückruffunktionen die Steuerung an das WSK-Subsystem zurückgegeben haben, bevor es den Socket schließt.

Nachdem eine WSK-Anwendung WskCloseSocket aufgerufen hat, sollte sie keine weiteren Aufrufe der Funktionen des Sockets ausführen.

Wenn eine WSK-Anwendung einen Sicherheitsdeskriptor auf einen Socket anwendet, wird die zwischengespeicherte Kopie des Sicherheitsdeskriptors, der im Aufruf von WskSocket, WskSocketConnect oder WskControlSocket angegeben ist, beim Schließen des Sockets nicht freigegeben. Eine WSK-Anwendung muss die zwischengespeicherte Kopie des Sicherheitsdeskriptors mithilfe des WSK_RELEASE_SD Clientsteuerungsvorgangs freigeben, wenn der Sicherheitsdeskriptor nicht mehr benötigt wird.

Das WSK-Subsystem gibt die Zuordnung des Arbeitsspeichers für das Socketobjekt WSK_SOCKET auf, das beim Erstellen des Sockets vom WSK-Subsystem zugewiesen wurde.

Bei verbindungsorientierten Sockets führt die WskCloseSocket-Funktion immer eine unterbrechungsfreie Trennung des Sockets durch, es sei denn, der Socket ist bereits vollständig in beide Richtungen getrennt. Um einen verbindungsorientierten Socket ordnungsgemäß von einer Remotetransportadresse zu trennen, sollte eine WSK-Anwendung die WskDisconnect-Funktion aufrufen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar in Windows Vista und höheren Versionen der Windows-Betriebssysteme.
Zielplattform Universell
Header wsk.h (einschließen von Wsk.h)
IRQL <= DISPATCH_LEVEL

Weitere Informationen

WSK_PROVIDER_BASIC_DISPATCH

WSK_PROVIDER_CONNECTION_DISPATCH WSK_PROVIDER_DATAGRAM_DISPATCH

WSK_PROVIDER_LISTEN_DISPATCH

WSK_SOCKET

WskControlSocket

WskDisconnect

WskSocket

WskSocketConnect