Verwenden von Winsock-Kernelfunktionen im Vergleich zu Ereignisrückruffunktionen
Bei bestimmten Socketvorgängen kann eine WSK-Anwendung (Winsock Kernel) entweder eine der WSK-Funktionen des Sockets aufrufen, um den Vorgang auszuführen, oder eine Ereignisrückruffunktion für den Socket implementieren und aktivieren, den das WSK-Subsystem aufruft, wenn das dem Vorgang zugeordnete Ereignis eintritt. Wenn eine WSK-Anwendung beispielsweise Daten auf einem verbindungsorientierten Socket empfängt, kann eine WSK-Anwendung entweder Aufrufe an die WskReceive-Funktion des Sockets tätigen oder eine WskReceiveEvent-Ereignisrückruffunktion auf dem Socket implementieren und aktivieren. Die Anforderungen einer WSK-Anwendung bestimmen, welche Methode die Anwendung verwenden soll. Beispiele für die Verwendung beider Methoden finden Sie in der WSK-Dokumentation.
In den folgenden Listen sind einige wichtige Punkte für die einzelnen Methoden zusammengefasst.
Verwenden von Winsock-Kernelfunktionen
Die WSK-Anwendung steuert die Socketvorgänge, d. h. die WSK-Anwendung steuert, wenn die Socketvorgänge auftreten. Dies kann die für die WSK-Anwendung erforderliche Synchronisierung vereinfachen.
Die WSK-Anwendung stellt IRPs für die Socketfunktionen bereit. Diese IRPs werden vom WSK-Subsystem in die Warteschlange gestellt, bis der Socketvorgang abgeschlossen ist. Weitere Informationen zur Verwendung von IRPs mit WSK-Funktionen finden Sie unter Verwenden von IRPs mit Winsock-Kernelfunktionen.
Die WSK-Anwendung kann blockierende Socketvorgänge ausführen, indem sie darauf wartet, dass der IRP für jeden Vorgang vom WSK-Subsystem abgeschlossen wird.
Die WSK-Anwendung muss in einigen Situationen möglicherweise mehrere Socketvorgänge in die Warteschlange stellen, um eine hochleistungsfähige Datenübertragung auf verbindungsorientierten Sockets sicherzustellen, um zu verhindern, dass eingehende Datagramme auf Datagrammsockets gelöscht werden, oder um zu verhindern, dass eingehende Verbindungen auf Lauschockets gelöscht werden.
Die WSK-Anwendung stellt die Datenpuffer für die Datenübertragungsvorgänge bereit. Dadurch wird die Anzahl der Daten verringert, die möglicherweise kopiert werden müssen. Wenn eine WSK-Anwendung jedoch mehrere Datenübertragungsvorgänge in die Warteschlange stellt, muss die Anwendung datenpuffer für das WSK-Subsystem für jeden Datenübertragungsvorgang in Warteschlange bereitstellen. Daher benötigt die WSK-Anwendung möglicherweise zusätzliche Arbeitsspeicherressourcen.
Verwenden von Ereignisrückruffunktionen
Das WSK-Subsystem steuert die Socketvorgänge, d. h. das WSK-Subsystem benachrichtigt die WSK-Anwendung über die Ereignisse des Sockets, indem die Ereignisrückruffunktionen des Sockets aufgerufen werden. Die WSK-Anwendung erfordert möglicherweise eine komplexere Synchronisierung, um die asynchrone Natur der Ereignisrückruffunktionen zu verarbeiten.
Die WSK-Anwendung verwendet keine IRPs für die Socketvorgänge.
Die WSK-Anwendung muss keine Socketvorgänge in die Warteschlange stellen. Das WSK-Subsystem ruft die Ereignisrückruffunktionen der WSK-Anwendung auf, sobald die Ereignisse des Sockets auftreten. Wenn die WSK-Anwendung mit der Rate mithalten kann, mit der die Ereignisrückruffunktionen eines Sockets aufgerufen werden, kann die Verwendung von Ereignisrückruffunktionen die höchste Leistung und die geringste Wahrscheinlichkeit zum Löschen von Datagrammen oder eingehenden Verbindungen bieten.
Das WSK-Subsystem stellt die Datenpuffer für Datenübertragungsvorgänge bereit. Die WSK-Anwendung muss diese Datenpuffer sofort oder innerhalb einer angemessenen Zeit wieder an das WSK-Subsystem freigeben, damit dem WSK-Subsystem nicht die Arbeitsspeicherressourcen ausgehen. Daher muss die WSK-Anwendung möglicherweise die Daten aus den Datenpuffern kopieren, die dem WSK-Subsystem gehören, in ihre eigenen Datenpuffer.
Hinweis Die obigen Listen sind nicht unbedingt vollständig. Bei der Auswahl der geeigneten Methode für eine bestimmte WSK-Anwendung können weitere Punkte berücksichtigt werden.