PFN_WSK_ACCEPT Rückruffunktion (wsk.h)
Die WskAccept--Funktion akzeptiert eine eingehende Verbindung in einem Überwachungssocket.
Syntax
PFN_WSK_ACCEPT PfnWskAccept;
NTSTATUS PfnWskAccept(
[in] PWSK_SOCKET ListenSocket,
ULONG Flags,
[in, optional] PVOID AcceptSocketContext,
[in, optional] const WSK_CLIENT_CONNECTION_DISPATCH *AcceptSocketDispatch,
[out, optional] PSOCKADDR LocalAddress,
[out, optional] PSOCKADDR RemoteAddress,
[in, out] PIRP Irp
)
{...}
Parameter
[in] ListenSocket
Ein Zeiger auf eine WSK_SOCKET-Struktur, die das Socketobjekt für den Überwachungs- oder Datenstromsocket angibt, der für eine eingehende Verbindung überprüft wird.
Flags
Dieser Parameter ist für die Systemverwendung reserviert. Eine WSK-Anwendung muss diesen Parameter auf Null festlegen.
[in, optional] AcceptSocketContext
Ein Zeiger auf einen vom Aufrufer bereitgestellten Kontext für den akzeptierten Socket. Das WSK-Subsystem übergibt diesen Zeiger an die Ereignisrückruffunktionen des akzeptierten Sockets. Die Kontextinformationen sind für das WSK-Subsystem nicht transparent. Die Kontextinformationen müssen im nicht ausgelagerten Speicher gespeichert werden. Wenn die WSK-Anwendung keine Ereignisrückruffunktionen für den akzeptierten Socket aktiviert, sollte dieser Zeiger auf NULL-festgelegt werden.
[in, optional] AcceptSocketDispatch
Ein Zeiger auf eine Konstante 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 sie die Zeiger in der Verteilertabelle auf NULL- für diese Ereignisrückruffunktionen festlegen, die nicht aktiviert werden. Wenn die WSK-Anwendung keine Ereignisrückruffunktionen für den akzeptierten Socket aktiviert, sollte dieser Zeiger auf NULL-festgelegt werden.
[out, optional] LocalAddress
Ein Zeiger auf einen vom Aufrufer zugewiesenen Puffer, der die lokale Transportadresse empfängt, auf der die eingehende Verbindung eingegangen ist. Der Puffer muss sich im nicht ausgelagerten Speicher befinden. Der Puffer muss auch groß genug sein, um den spezifischen SOCKADDR-Strukturtyp zu enthalten, der der Adressfamilie entspricht, die die WSK-Anwendung beim Erstellen des Überwachungssockets angegeben hat. Dieser Zeiger ist optional und kann NULL-sein.
[out, optional] RemoteAddress
Ein Zeiger auf einen vom Aufrufer zugewiesenen Puffer, der die Remotetransportadresse empfängt, von der die eingehende Verbindung stammt. Der Puffer muss sich im nicht ausgelagerten Speicher befinden. Der Puffer muss auch groß genug sein, um den spezifischen SOCKADDR-Strukturtyp zu enthalten, der der Adressfamilie entspricht, die die WSK-Anwendung beim Erstellen des Überwachungssockets angegeben hat. Dieser Zeiger ist optional und kann NULL-sein.
[in, out] Irp
Ein Zeiger auf ein vom Aufrufer zugewiesenes IRP, das vom WSK-Subsystem verwendet wird, um den Annahmevorgang asynchron abzuschließen. Weitere Informationen zur Verwendung von IRPs mit WSK-Funktionen finden Sie unter Verwenden von IRPs mit Winsock Kernel Functions.
Rückgabewert
WskAccept gibt einen der folgenden NTSTATUS-Codes zurück:
Rückgabecode | Beschreibung |
---|---|
|
Eine eingehende Verbindung wurde erfolgreich akzeptiert. Das IRP wird mit dem Erfolgsstatus abgeschlossen. |
|
Das IRP wurde vom WSK-Subsystem in die Warteschlange gestellt, das auf eine eingehende Verbindung im Überwachungssocket wartet. |
|
Der Socket ist nicht mehr funktionsfähig. Das IRP wird mit dem Fehlerstatus abgeschlossen. Die WSK-Anwendung muss die WskCloseSocket- Funktion aufrufen, um den Socket so schnell wie möglich zu schließen. |
|
Fehler. Das IRP wird mit dem Fehlerstatus abgeschlossen. |
Bemerkungen
Eine WSK-Anwendung kann die WskAccept--Funktion entweder für einen Überwachungssocket oder einen Datenstromsocket aufrufen, den sie zuvor an eine lokale Transportadresse gebunden hat, indem sie die WskBind--Funktion aufruft.
Das Verhalten der WskAccept--Funktion hängt davon ab, ob eine eingehende Verbindung auf die Aufnahme des Überwachungssockets wartet:
- Wenn bereits eine eingehende Verbindung auf dem Überwachungssocket eingegangen ist und darauf wartet, akzeptiert zu werden, gibt die WskAccept--Funktion STATUS_SUCCESS zurück. In dieser Situation wird das IRP mit dem Erfolgsstatus abgeschlossen, und das IoStatus.Information Feld des IRP enthält einen Zeiger auf das Socketobjekt für den akzeptierten Socket.
- Wenn eine eingehende Verbindung nicht auf die Annahme des Überwachungssockets wartet, gibt WskAccept STATUS_PENDING zurück, und das WSK-Subsystem stellt die IRP in die Warteschlange, bis eine eingehende Verbindung empfangen wird. Wenn eine eingehende Verbindung empfangen wird, schließt das WSK-Subsystem das IRP asynchron mit dem Erfolgsstatus ab. In diesem Fall enthält das IoStatus.Information Feld des IRP einen Zeiger auf das Socketobjekt für den akzeptierten Socket.
Wenn die WskAccept Funktion erfolgreich eine eingehende Verbindung akzeptiert, sind alle Ereignisrückruffunktionen im akzeptierten Socket standardmäßig deaktiviert. Weitere Informationen zum Aktivieren einer der Ereignisrückruffunktionen des akzeptierten Sockets finden Sie unter Aktivieren und Deaktivieren von Ereignisrückruffunktionen.
Wenn eine WSK-Anwendung einen nicht-NULL- Zeiger im parameter LocalAddress angibt, müssen die Puffer, auf die diese Parameter verweisen, im RemoteAddress Parameter oder in beiden Parametern gültig bleiben, und wenn WskAccept STATUS_PENDING zurückgibt, müssen die Puffer, auf die von diesen Parametern verwiesen wird, gültig bleiben, bis das IRP abgeschlossen ist. Wenn die WSK-Anwendung die Puffer mit einer der ExAllocateXxx--Funktionen zugeordnet hat, kann der Speicher nicht mit der entsprechenden ExFree-Xxx--Funktion freigegeben werden, bis die IRP abgeschlossen ist. Wenn die WSK-Anwendung die Puffer auf dem Stapel zugeordnet hat, kann sie nicht von der Funktion zurückgegeben werden, die die WskAccept--Funktion aufruft, bis die IRP abgeschlossen ist.
Das WSK-Subsystem weist den Speicher für die Socketobjektstruktur ( WSK_SOCKET) für die akzeptierte Verbindung im Auftrag der WSK-Anwendung zu. Das WSK-Subsystem verteilt diesen Speicher, wenn der Socket geschlossen wird.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Verfügbar in Windows Vista und höheren Versionen der Windows-Betriebssysteme. |
Zielplattform- | Universal |
Header- | wsk.h (include Wsk.h) |
IRQL- | <= DISPATCH_LEVEL |