Winsock-Kernelereignisse
Das Winsock Kernel-Subsystem (WSK) kann eine WSK-Anwendung asynchron benachrichtigen, wenn bestimmte Socketereignisse auftreten, z. B. wenn neue Daten in einem Socket empfangen wurden oder wenn ein Socket getrennt wurde. Damit eine WSK-Anwendung asynchron über Socketereignisse benachrichtigt wird, muss die WSK-Anwendung die entsprechenden Ereignisrückruffunktionen implementieren und diese Ereignisrückruffunktionen für die erstellten Sockets aktivieren.
Hinweis Eine WSK-Anwendung ist nicht erforderlich, um Ereignisrückruffunktionen zu implementieren oder zu verwenden. Eine WSK-Anwendung kann die meisten WSK-Socketvorgänge ausführen, indem die entsprechenden WSK-Socketfunktionen aufgerufen werden. Das einzige WSK-Feature, das die Verwendung von Ereignisrückruffunktionen erfordert, ist der Modus für die bedingte Annahme für Lauschockets. Weitere Informationen zu den Vor- und Nachteilen zwischen der Verwendung von WSK-Funktionen und der Verwendung von Ereignisrückruffunktionen finden Sie unter Verwenden von Winsock-Kernelfunktionen im Vergleich zu Ereignisrückruffunktionen.
Jede WSK-Socketkategorie unterstützt einen anderen Satz von Socketereignissen.
Grundlegende Sockets
Grundlegende Sockets unterstützen keine Socketereignisse.
Lauschen von Sockets
Ereignis | Ereignisrückruffunktion |
---|---|
Eine eingehende Verbindung wurde akzeptiert. |
|
Eine eingehende Verbindungsanforderung ist eingetroffen. |
|
Eine eingehende Verbindungsanforderung wurde gelöscht. |
* Gilt nur für lauschende Sockets, für die der Modus für die bedingte Annahme aktiviert ist. Weitere Informationen zum Verwenden des Modus für die bedingte Akzeptanz mit Lauschockets finden Sie unter Lauschen auf und Akzeptieren eingehender Verbindungen.
Datagrammsockets
Ereignis | Ereignisrückruffunktion |
---|---|
Mindestens ein neues Datagramm wurde empfangen. |
Verbindungsorientierte Sockets
Ereignis | Ereignisrückruffunktion |
---|---|
Neue Daten wurden empfangen. |
|
Der Socket wurde getrennt. |
|
Die ideale Größe des Sendebacklogs hat sich geändert. |
Wenn eine WSK-Anwendung einen Socket erstellt, sind die Ereignisrückruffunktionen des Sockets standardmäßig deaktiviert. Eine WSK-Anwendung muss die Ereignisrückruffunktionen eines Sockets aktivieren, damit das WSK-Subsystem die Ereignisrückruffunktionen des Sockets aufrufen kann, wenn Socketereignisse auftreten. Weitere Informationen zum Aktivieren und Deaktivieren der Ereignisrückruffunktionen eines Sockets finden Sie unter Aktivieren und Deaktivieren von Ereignisrückruffunktionen.
Wenn eine WSK-Anwendung eine Erweiterungsschnittstelle für einen Socket registriert, unterstützt die Erweiterungsschnittstelle möglicherweise zusätzliche Ereignisse. Weitere Informationen zum Registrieren einer Erweiterungsschnittstelle für einen Socket finden Sie unter Registrieren einer Erweiterungsschnittstelle.
Das WSK-Subsystem kann auch eine WSK-Anwendung über Ereignisse benachrichtigen, die nicht für einen bestimmten Socket spezifisch sind. Damit eine WSK-Anwendung über diese Ereignisse benachrichtigt wird, muss die WSK-Anwendung eine WskClientEvent-Ereignisrückruffunktion implementieren. Derzeit sind keine Ereignisse definiert, die nicht für einen bestimmten Socket spezifisch sind. Die WskClientEvent-Ereignisrückruffunktion einer WSK-Anwendung ist immer aktiviert und kann nicht deaktiviert werden.
Die Ereignisrückruffunktionen einer WSK-Anwendung dürfen nicht auf den Abschluss anderer WSK-Anforderungen im Kontext von WSK-Vervollständigungs- oder Ereignisrückruffunktionen warten. Der Rückruf kann andere WSK-Anforderungen initiieren, vorausgesetzt, er verbringt nicht zu viel Zeit mit DISPATCH_LEVEL oder erschöpft den Kernelstapel, darf aber nicht auf deren Abschluss warten, auch wenn der Rückruf unter IRQL = PASSIVE_LEVEL aufgerufen wird.