PFN_WSK_ACCEPT_EVENT Rückruffunktion (wsk.h)

Die WskAcceptEvent-Ereignisrückruffunktion benachrichtigt eine WSK-Anwendung, dass eine eingehende Verbindung mit einem Überwachungs socket akzeptiert wurde.

Syntax

PFN_WSK_ACCEPT_EVENT PfnWskAcceptEvent;

NTSTATUS PfnWskAcceptEvent(
  [in, optional] PVOID SocketContext,
  [in]           ULONG Flags,
  [in]           PSOCKADDR LocalAddress,
  [in]           PSOCKADDR RemoteAddress,
  [in, optional] PWSK_SOCKET AcceptSocket,
  [out]          PVOID *AcceptSocketContext,
  [out]          const WSK_CLIENT_CONNECTION_DISPATCH **AcceptSocketDispatch
)
{...}

Parameter

[in, optional] SocketContext

Ein Zeiger auf den Socketkontext für den Überwachungs socket, auf dem die eingehende Verbindung akzeptiert wurde. Die WSK-Anwendung hat diesen Zeiger auf das WSK-Subsystem bereitgestellt, wenn es die WskSocket-Funktion aufgerufen hat , um den Überwachungs socket zu erstellen.

[in] Flags

Ein ULONG-Wert, der das folgende Kennzeichen oder null enthält:

WSK_FLAG_AT_DISPATCH_LEVEL

Das WSK-Subsystem namens WskAcceptEvent-Ereignisrückruffunktion bei IRQL = DISPATCH_LEVEL. Wenn dieses Flag nicht festgelegt ist, hat das WSK-Subsystem möglicherweise die WskAcceptEvent-Ereignisrückruffunktion bei jeder IRQL <= DISPATCH_LEVEL aufgerufen.

[in] LocalAddress

Ein Zeiger auf einen Puffer, der die lokale Transportadresse enthält, auf der die eingehende Verbindung eingetroffen ist. Der Puffer enthält den spezifischen SOCKADDR-Strukturtyp, der der Adressfamilie entspricht, die die WSK-Anwendung beim Erstellen des Überwachungs sockets angegeben hat.

[in] RemoteAddress

Ein Zeiger auf einen Puffer, der die Remotetransportadresse enthält, von der die eingehende Verbindung stammt. Der Puffer enthält den spezifischen SOCKADDR-Strukturtyp, der der Adressfamilie entspricht, die die WSK-Anwendung beim Erstellen des Überwachungs sockets angegeben hat.

[in, optional] AcceptSocket

Ein Zeiger auf eine WSK_SOCKET Struktur, die das Socketobjekt für den akzeptierten Socket ist. Wenn dieser Zeiger NULL ist, ist der Überwachungs socket nicht mehr funktionsfähig, und die WSK-Anwendung muss die WskCloseSocket-Funktion aufrufen, um den Überwachungs socket so schnell wie möglich zu schließen.

[out] AcceptSocketContext

Ein Zeiger auf eine Variable, die einen Zeiger auf einen von der WSK-Anwendung bereitgestellten Kontext für den akzeptierten Socket empfängt. Das WSK-Subsystem übergibt diesen Zeiger an die Ereignisrückruffunktionen des akzeptierten Sockets. Die Kontextinformationen sind für das WSK-Subsystem undurchsichtig und müssen im nicht seitenseitigen Speicher gespeichert werden. Wenn die WSK-Anwendung keine Ereignisrückruffunktionen im akzeptierten Socket aktiviert, sollte die Anwendung die Variable festlegen, auf die durch den AcceptSocketContext-Parameter auf NULL verwiesen wird.

[out] AcceptSocketDispatch

Ein Zeiger auf eine Variable, die einen Zeiger auf eine Konstante empfängt WSK_CLIENT_CONNECTION_DISPATCH Struktur. Diese Struktur ist eine Verteilertabelle, die Zeiger auf die Ereignisrückruffunktionen für den akzeptierten Socket enthält. Wenn die WSK-Anwendung nicht alle Ereignisrückruffunktionen für den akzeptierten Socket aktiviert, sollte die Anwendung die Zeiger in der Verteilertabelle auf NULL für diese Ereignisrückruffunktionen festlegen, die sie nicht aktiviert. Wenn die WSK-Anwendung keine Ereignisrückruffunktionen für den akzeptierten Socket aktiviert, sollte sie die Variable festlegen, die vom AcceptSocketDispatch-Parameter auf NULL verweist.

Rückgabewert

Die WskAcceptEvent-Ereignisrückruffunktion einer WSK-Anwendung kann einen der folgenden NTSTATUS-Codes zurückgeben:

Rückgabecode Beschreibung
STATUS_SUCCESS
Die WSK-Anwendung akzeptierte die eingehende Verbindung.
STATUS_REQUEST_NOT_ACCEPTED
Die WSK-Anwendung hat die eingehende Verbindung abgelehnt. Wenn dieser Wert zurückgegeben wird, schließt das WSK-Subsystem den akzeptierten Socket im Namen der WSK-Anwendung.

Bemerkungen

Das WSK-Subsystem ruft die WskAcceptEvent-Ereignisrückruffunktion einer WSK-Anwendung auf, wenn eine eingehende Verbindung nur im Überwachungs socket akzeptiert wird, wenn die Ereignisrückruffunktion zuvor mit der SO_WSK_EVENT_CALLBACK Socketoption aktiviert wurde. Weitere Informationen zum Aktivieren der Ereignisrückruffunktionen eines Sockets finden Sie unter Aktivieren und Deaktivieren von Ereignisrückruffunktionen.

Wenn die WSKAcceptEvent-Ereignisrückruffunktion einer WSK-Anwendung in einem Überwachungs socket aktiviert ist und die Anwendung über einen ausstehenden Aufruf der WskAccept-Funktion für denselben Überwachungs socket verfügt, nimmt der ausstehende Aufruf an WskAccept Vorrang vor der WskAcceptEvent-Ereignisrückruffunktion . Das WSK-Subsystem ruft die WskAcceptEvent-Ereignisrückruffunktion nur auf, wenn keine IRPs aus ausstehenden Aufrufen der WskAccept-Funktion in die Warteschlange gestellt werden. Eine WSK-Anwendung sollte jedoch nicht davon ausgehen, dass das WSK-Subsystem die WskAcceptEvent-Ereignisrückruffunktion der Anwendung für einen ausstehenden Aufruf der WskAccept-Funktion nicht aufruft. Rennbedingungen sind vorhanden, bei denen das WSK-Subsystem weiterhin die WskAcceptEvent-Ereignisrückruffunktion für den Socket aufrufen könnte. Die einzige Möglichkeit für eine WSK-Anwendung, um sicherzustellen, dass das WSK-Subsystem die WskAcceptEvent-Ereignisrückruffunktion der Anwendung für einen Überwachungs socket nicht aufruft, besteht darin, die WskAcceptEvent-Ereignisrückruffunktion der Anwendung im Socket zu deaktivieren.

Wenn das WSK-Subsystem die WSKAcceptEvent-Ereignisrückruffunktion einer WSK-Anwendung aufruft, sind alle Ereignisrückruffunktionen im akzeptierten Socket standardmäßig deaktiviert. Wenn eine WSK-Anwendung eine der verbindungsorientierten Socketereignisrückruffunktionen in einem Überwachungs socket aktiviert, werden diese Ereignisrückruffunktionen standardmäßig für alle verbindungsorientierten Sockets aktiviert, die für diesen Überwachungs socket akzeptiert werden. Weitere Informationen zum Aktivieren einer der Ereignisrückruffunktionen des akzeptierten Sockets finden Sie unter Aktivieren und Deaktivieren von Ereignisrückruffunktionen.

Die SOCKADDR-Strukturen , auf die durch die Parameter LocalAddress und RemoteAddress verwiesen werden, sind nur für die Dauer des Aufrufs der WskAcceptEvent-Ereignisrückruffunktion gültig. Wenn eine WSK-Anwendung diese Transportadressen zu einem späteren Zeitpunkt benötigt, kann sie den Inhalt dieser Strukturen in seine eigenen SOCKADDR-Strukturen kopieren, bevor sie von der WskAcceptEvent-Ereignisrückruffunktion zurückgegeben wird, oder sie kann später die WskGetLocalAddress - und WskGetRemoteAddress-Funktionen für den akzeptierten Socket aufrufen.

Das WSK-Subsystem weist den Speicher für die Socketobjektstruktur ( WSK_SOCKET) für die akzeptierte Verbindung im Namen der WSK-Anwendung zu. Das WSK-Subsystem verteilt diesen Speicher, wenn der Socket geschlossen wird.

Das WSK-Subsystem ruft die WskAcceptEvent-Ereignisrückruffunktion einer WSK-Anwendung bei IRQL <= DISPATCH_LEVEL auf.

Die WskAcceptEvent-Ereignisrückruffunktion einer WSK-Anwendung darf nicht auf den Abschluss anderer WSK-Anforderungen im Kontext der WSK-Abschluss- oder Ereignisrückruffunktionen warten. Der Rückruf kann andere WSK-Anforderungen initiieren (vorausgesetzt, dass er nicht zu viel Zeit bei DISPATCH_LEVEL verbringt), aber er darf nicht warten, auch wenn der Rückruf bei IRQL = PASSIVE_LEVEL aufgerufen wird.

Anforderungen

   
Unterstützte Mindestversion (Client) Verfügbar in Windows Vista und späteren Versionen der Windows-Betriebssysteme.
Zielplattform Windows
Kopfzeile wsk.h (include Wsk.h)
IRQL <= DISPATCH_LEVEL

Siehe auch

SOCKADDR

WSK_CLIENT_CONNECTION_DISPATCH

WSK_CLIENT_LISTEN_DISPATCH

WSK_SOCKET

WskAccept

WskCloseSocket

WskControlSocket

WskGetLocalAddress

WskGetRemoteAddress

WskSocket