Winsock 内核事件

Winsock 内核 (WSK) 子系统可以在发生某些套接字事件时异步通知 WSK 应用程序,例如在套接字上收到新数据或断开连接时。 为了使 WSK 应用程序获得套接字事件的异步通知,WSK 应用程序必须实现适当的事件回调函数,并在它创建的套接字上启用这些事件回调函数。

注意 实现或使用事件回调函数不需要 WSK 应用程序。 WSK 应用程序可以通过调用相应的 WSK 套接字函数来执行大多数 WSK 套接字操作。 唯一需要使用事件回调函数的 WSK 功能是侦听套接字上的条件接受模式。 有关使用 WSK 函数与使用事件回调函数之间的优缺点的详细信息,请参阅 使用 Winsock 内核函数与事件回调函数

每个 WSK 套接字类别 都支持一组不同的套接字事件。

基本套接字

基本套接字不支持任何套接字事件。

侦听套接字

事件 事件回调函数

已接受传入连接。

WskAcceptEvent

传入的连接请求已到达。

WskInspectEvent

传入的连接请求已被删除。

WskAbortEvent

* 仅适用于启用了条件接受模式的侦听套接字。 有关对侦听套接字使用条件接受模式的详细信息,请参阅 侦听和接受传入连接

数据报套接字

事件 事件回调函数

已收到一个或多个新数据报。

WskReceiveFromEvent

面向连接的套接字

事件 事件回调函数

已收到新数据。

WskReceiveEvent

套接字已断开连接。

WskDisconnectEvent

理想的发送积压工作大小已更改。

WskSendBacklogEvent

当 WSK 应用程序创建套接字时,默认情况下会禁用套接字的事件回调函数。 WSK 应用程序必须启用套接字的事件回调函数,以便 WSK 子系统在套接字事件发生时调用套接字的事件回调函数。 有关启用和禁用套接字的事件回调函数的详细信息,请参阅 启用和禁用事件回调函数

如果 WSK 应用程序为套接字注册 扩展接口 ,则扩展接口可能支持其他事件。 有关为套接字注册扩展接口的详细信息,请参阅 注册扩展接口

WSK 子系统还可以通知 WSK 应用程序不特定于特定套接字的事件。 为了使 WSK 应用程序收到这些事件的通知,WSK 应用程序必须实现 WskClientEvent 事件回调函数。 目前没有定义不特定于特定套接字的事件。 WSK 应用程序的 WskClientEvent 事件回调函数始终处于启用状态,并且无法禁用。

WSK 应用程序的事件回调函数不得在 WSK 完成或事件回调函数的上下文中等待其他 WSK 请求完成。 回调可能会启动其他 WSK 请求,前提是它不会在DISPATCH_LEVEL或耗尽内核堆栈时花费太多时间,但即使以 IRQL = PASSIVE_LEVEL 调用回调,也不得等待其完成。