PFN_WSK_ACCEPT Rückruffunktion (wsk.h)
Die WskAccept-Funktion akzeptiert eine eingehende Verbindung auf einem Lauschsocket.
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 Lausch- oder Streamsocket angibt, der auf 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 undurchsichtig. 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 Dispatchtabelle, 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 Verteilungstabelle für die Ereignisrückruffunktionen auf NULL festlegen, die sie nicht aktiviert. 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, an der die eingehende Verbindung eingegangen ist. Der Puffer muss sich im Nicht-Auslagerungsspeicher befinden. Der Puffer muss außerdem groß genug sein, um den spezifischen SOCKADDR-Strukturtyp zu enthalten, der der Adressfamilie entspricht, die die WSK-Anwendung beim Erstellen des Lauschockets 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-Auslagerungsspeicher befinden. Der Puffer muss außerdem groß genug sein, um den spezifischen SOCKADDR-Strukturtyp zu enthalten, der der Adressfamilie entspricht, die die WSK-Anwendung beim Erstellen des Lauschockets angegeben hat. Dieser Zeiger ist optional und kann NULL sein.
[in, out] Irp
Ein Zeiger auf einen vom Aufrufer zugewiesenen IRP, den das WSK-Subsystem verwendet, um den Annahmevorgang asynchron abzuschließen. Weitere Informationen zur Verwendung von IRPs mit WSK-Funktionen finden Sie unter Verwenden von IRPs mit Winsock-Kernelfunktionen.
Rückgabewert
WskAccept gibt einen der folgenden NTSTATUS-Codes zurück:
Rückgabecode | Beschreibung |
---|---|
|
Eine eingehende Verbindung wurde erfolgreich akzeptiert. Die IRP wird erfolgreich status abgeschlossen. |
|
Das IRP wurde vom WSK-Subsystem in die Warteschlange gestellt, das auf eine eingehende Verbindung im Lauschocket wartet. |
|
Der Socket ist nicht mehr funktionsfähig. Die IRP wird mit einem Fehler status abgeschlossen. Die WSK-Anwendung muss die WskCloseSocket-Funktion aufrufen, um den Socket so schnell wie möglich zu schließen. |
|
Ein Fehler ist aufgetreten. Die IRP wird mit einem Fehler status abgeschlossen. |
Hinweise
Eine WSK-Anwendung kann die WskAccept-Funktion entweder für einen Lauschsocket oder einen Streamsocket aufrufen, den sie zuvor durch Aufrufen der WskBind-Funktion an eine lokale Transportadresse gebunden hat.
Das Verhalten der WskAccept-Funktion hängt davon ab, ob eine eingehende Verbindung darauf wartet, vom Lauschocket akzeptiert zu werden:
- Wenn bereits eine eingehende Verbindung auf dem Lauschsocket eingegangen ist und darauf wartet, akzeptiert zu werden, gibt die WskAccept-Funktion STATUS_SUCCESS zurück. In diesem Fall wird das IRP erfolgreich status abgeschlossen, und das Feld IoStatus.Information des IRP enthält einen Zeiger auf das Socketobjekt für den akzeptierten Socket.
- Wenn eine eingehende Verbindung nicht darauf wartet, für den lauschenden Socket akzeptiert zu werden, gibt WskAccept STATUS_PENDING zurück, und das WSK-Subsystem stellt das IRP in die Warteschlange, bis eine eingehende Verbindung empfangen wird. Wenn eine eingehende Verbindung empfangen wird, schließt das WSK-Subsystem die IRP mit Erfolg status asynchron ab. In diesem Fall enthält das Feld IoStatus.Information 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 der Ereignisrückruffunktionen des akzeptierten Sockets finden Sie unter Aktivieren und Deaktivieren von Ereignisrückruffunktionen.
Wenn eine WSK-Anwendung einen Zeiger ungleich NULL im Parameter LocalAddress, im RemoteAddress-Parameter oder in beiden Parametern angibt und WskAccept STATUS_PENDING zurückgibt, müssen die Puffer, auf die von diesen Parametern verwiesen wird, bis zum Abschluss des IRP gültig bleiben. Wenn die WSK-Anwendung die Puffer mit einer der ExAllocateXxx-Funktionen zugeordnet hat, kann sie den Speicher mit der entsprechenden ExFreeXxx-Funktion erst freigeben, wenn die IRP abgeschlossen ist. Wenn die WSK-Anwendung die Puffer im Stapel zugeordnet hat, kann sie erst nach Abschluss des IRP von der Funktion zurückgeben, die die WskAccept-Funktion aufruft.
Das WSK-Subsystem ordnet den Arbeitsspeicher für die Socketobjektstruktur ( WSK_SOCKET) für die akzeptierte Verbindung im Namen der WSK-Anwendung zu. Das WSK-Subsystem gibt die Zuordnung dieses Arbeitsspeichers auf, wenn der Socket geschlossen wird.
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 |