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

OutputSizeReturned

Null

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

在调用 WskControlSocket 函数以在套接字上禁用事件回调函数时,WSK 应用程序可以选择指定指向 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 成员设置为正在禁用的事件回调函数的事件标志的按位 OR 和WSK_EVENT_DISABLE标志来独立禁用事件回调函数。

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

事件标志 事件回调函数

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)