SO_WSK_EVENT_CALLBACK

"SO_WSK_EVENT_CALLBACK套接字"选项允许 WSK 应用程序启用和禁用套接字的事件回调函数。 此套接字选项仅适用于侦听套接字、数据报套接字、面向连接的套接字,以及已注册至少定义了一个事件回调函数的扩展接口的基本套接字。

如果 WSK 应用程序使用此套接字选项在侦听套接字或数据报套接字上启用或禁用事件回调函数,则必须在套接字绑定到本地传输地址后启用或禁用事件回调函数。

如果 WSK 应用程序使用此套接字选项在面向连接的套接字上启用或禁用事件回调函数,则必须在套接字连接到远程传输地址后启用或禁用。

若要在套接字上启用或禁用事件回调函数,WSK 应用程序将调用具有以下参数的 WskControlSocket 函数。

参数

RequestType

WskSetOption

ControlCode

SO_WSK_EVENT_CALLBACK

级别

SOL_SOCKET

InputSize

sizeof (WSK_EVENT_CALLBACK_CONTROL)

InputBuffer

指向结构WSK_EVENT_CALLBACK_CONTROL指针

OutputSize

0

OutputBuffer

Null

OutputSizeRe以

Null

调用 WskControlSocket 函数以在套接字上启用事件回调函数时,WSK 应用程序未指定指向 IRP 的指针。

WSK 应用程序可以选择在调用 WskControlSocket 函数时指定指向 IRP 的指针,以禁用套接字上的事件回调函数。

当 WSK 应用程序调用 WskControlSocket 以禁用事件回调函数时,WSK 子系统的行为如下所示:

  • 如果 WSK 应用程序调用 WskControlSocket 函数时没有正在禁用的事件回调函数的正在进行调用,则事件回调函数将被禁用, WskControlSocket 函数将返回 STATUS_SUCCESS。 如果 WSK 应用程序指定了 IRP,则 IRP 以成功状态完成。

  • 如果 WSK 应用程序调用 WskControlSocket 函数并且 WSK 应用程序指定了 IRP 时正在对事件回调函数进行中的调用被禁用, 则 WskControlSocket 函数将返回 STATUS_PENDING。 WSK 子系统禁用事件回调函数,在返回对事件回调函数的所有正在进行调用后完成 IRP。

  • 如果在 WSK 应用程序调用 WskControlSocket 函数并且 WSK 应用程序未指定 IRP 时正在禁用对事件回调函数的调用, WskControlSocket 函数将返回 STATUS_EVENT_PENDING。 在返回对事件回调函数的所有正在进行调用后,WSK 子系统将禁用事件回调函数。

启用或禁用任何标准 WSK 事件回调函数时,WSK 应用程序将 WSK_EVENT_CALLBACK_CONTROL 结构的 NpiId 成员设置为指向 WSK 网络编程接口 (NPI ) 标识符 NPI_WSK_INTERFACE_ID 的指针。

为扩展接口启用或禁用任何回调函数时,WSK 应用程序将 WSK_EVENT_CALLBACK_CONTROL 结构的 NpiId 成员设置到指向该扩展接口的 NPI 标识符的指针。

启用事件回调函数时,WSK 应用程序可以同时启用对特定 WSK 套接字类别有效的事件回调函数的任意组合。 WSK 应用程序同时通过为启用的所有事件回调函数将 WSK_EVENT_CALLBACK_CONTROL 结构的 EventMask 成员设置为事件标志的按位 OR 来启用这些组合。

禁用事件回调函数时,WSK 应用程序必须单独禁用每个事件回调函数。 WSK 应用程序将 WSK_EVENT_CALLBACK_CONTROL 结构的 EventMask 成员设置为要禁用的事件回调函数和 WSK_EVENT_DISABLE 标志的事件标志的按位 OR,以独立禁用事件回调函数。

下表显示了侦听套接字的有效事件标志。

事件标志 事件回调函数

WSK_EVENT_ACCEPT

WskAcceptEvent

下表显示了数据报套接字的有效事件标志。

事件标志 事件回调函数

WSK_EVENT_RECEIVE_FROM

WskReceiveFromEvent

下表显示了面向连接的套接字的有效事件标志。

事件标志 事件回调函数

WSK_EVENT_DISCONNECT

WskDisconnectEvent

WSK_EVENT_RECEIVE

WskReceiveEvent

WSK_EVENT_SEND_BACKLOG

WskSendBacklogEvent

侦听套接字可以在侦听套接字接受的面向连接的套接字上自动启用事件回调函数。 WSK 应用程序在侦听套接字上启用面向连接的套接字事件回调函数,从而自动启用这些回调函数。 只有在侦听套接字的 WskAcceptEvent 事件回调函数接受该套接字时,事件回调函数才在接受的面向连接的套接字上自动启用。 如果侦听套接字的 WskAccept 函数接受面向连接的套接字,则接受的套接字的事件回调函数不会自动启用。

在侦听套接字上启用任何面向连接的事件回调函数后,无法在侦听套接字上禁用这些函数。 如果 WskAcceptEvent 事件回调函数已禁用,然后在侦听套接字上重新启用,则最初在侦听套接字上启用的任何面向连接的事件回调函数将继续应用于 WskAcceptEvent 事件回调函数接受的所有面向连接的套接字。

有关启用和禁用套接字的事件回调函数的信息,请参阅启用和禁用事件 回调函数

要求

版本

适用于 Windows Vista 及更高版本的 Windows 操作系统。

标头

Wsk.h (包括 Wsk.h)