PFN_WSK_RECEIVE_FROM_EVENT回调函数 (wsk.h)
WskReceiveFromEvent 事件回调函数通知 WSK 应用程序已在数据报套接字上收到一个或多个数据报。
语法
PFN_WSK_RECEIVE_FROM_EVENT PfnWskReceiveFromEvent;
NTSTATUS PfnWskReceiveFromEvent(
[in, optional] PVOID SocketContext,
[in] ULONG Flags,
[in, optional] PWSK_DATAGRAM_INDICATION DataIndication
)
{...}
参数
[in, optional] SocketContext
指向已接收数据报的数据报套接字的套接字上下文的指针。 WSK 应用程序在调用 WskSocket 函数来创建数据报套接字时,向 WSK 子系统提供了此指针。
[in] Flags
包含以下标志组合的按位 OR 的 ULONG 值:
MSG_BCAST
数据报作为链接层广播接收,或者接收目标传输地址是广播地址。
MSG_MCAST
数据报是使用多播地址的目标传输地址接收的。
WSK_FLAG_AT_DISPATCH_LEVEL
名为 WskReceiveFromEvent 的 WSK 子系统在 IRQL = DISPATCH_LEVEL 处 事件回调函数。 如果未设置此标志,WSK 子系统可能在任何 IRQL <= DISPATCH_LEVEL处调用 WskReceiveFromEvent 事件回调函数。
[in, optional] DataIndication
指向描述收到的数据报的 WSK_DATAGRAM_INDICATION 结构链接列表的指针。 如果此参数 NULL,则套接字不再正常工作,并且 WSK 应用程序必须调用 WskCloseSocket 函数才能尽快关闭套接字。
返回值
WSK 应用程序的 WskReceiveFromEvent 事件回调函数可以返回以下 NTSTATUS 代码之一:
返回代码 | 描述 |
---|---|
|
WSK 应用程序接受数据报,并从链接列表中检索了所有数据报 WSK_DATAGRAM_INDICATION 结构。 当套接字上收到新的数据报时,WSK 子系统可以再次调用 WskReceiveFromEvent 事件回调函数。 |
|
WSK 应用程序接受数据报,但未从链接列表中检索所有数据报 WSK_DATAGRAM_INDICATION 结构。 WSK 应用程序将保留WSK_DATAGRAM_INDICATION结构的链接列表,直到检索到所有数据报。 在 WSK 应用程序检索所有数据报后,它将调用 WskRelease 函数,以将WSK_DATAGRAM_INDICATION结构的链接列表释放回 WSK 子系统。 当套接字上收到新的数据报时,WSK 子系统可以再次调用 WskReceiveFromEvent 事件回调函数。 |
|
WSK 应用程序不接受数据报。 如果 WSK 应用程序返回此状态代码,WSK 子系统会根据 WSK 应用程序启用 WskReceiveFromEvent 事件回调函数的方式以不同的方式做出响应。
|
言论
仅当以前使用 SO_WSK_EVENT_CALLBACK 套接字选项启用事件回调函数时,WSK 子系统才会调用 WSK 应用程序的 WskReceiveFromEvent 事件回调函数。 有关启用套接字的事件回调函数的详细信息,请参阅 启用和禁用事件回调函数。
如果在数据报套接字上启用了 WskReceiveFromEvent WskReceiveFromEvent 事件回调函数,并且应用程序还对同一数据报套接字上的 WskReceiveFrom 函数进行挂起调用, 然后,当数据报到达时,对 WskReceiveFrom 函数的挂起调用将优先于 WskReceiveFromEvent 事件回调函数。 仅当没有从挂起调用到 WskReceiveFrom 函数的 IRP 时,WSK 子系统才会调用应用程序的 WskReceiveFromEvent 事件回调函数。 但是,WSK 应用程序不应假定 WSK 子系统不会调用应用程序的 WskReceiveFromEvent 事件回调函数,该套接字具有对 WskReceiveFrom 函数的挂起调用。 存在争用条件,其中 WSK 子系统仍可以调用 WSK 应用程序的 WskReceiveFromEvent 套接字的事件回调函数。 WSK 应用程序确保 WSK 子系统不会在数据报套接字上调用应用程序的 WskReceiveFromEvent 事件回调函数的唯一方法是禁用应用程序的 WskReceiveFromEvent 套接字上的事件回调函数。
WSK 子系统在 IRQL <= DISPATCH_LEVEL 调用 WSK 应用程序的 WskReceiveFromEvent 事件回调函数。
WSK 应用程序的 WskReceiveFromEvent 事件回调函数不得等待 WSK 完成或事件回调函数上下文中的其他 WSK 请求的完成。 回调可以启动其他 WSK 请求(假设它在DISPATCH_LEVEL花费的时间不太多),但即使在 IRQL = PASSIVE_LEVEL调用回调,它也不能等待完成。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 在 Windows Vista 和更高版本的 Windows作系统中可用。 |
目标平台 | 窗户 |
标头 | wsk.h (包括 Wsk.h) |
IRQL | <= DISPATCH_LEVEL |