WskInspectEvent 事件回调函数通知 WSK 应用程序已收到启用了条件接受模式的侦听套接字上的传入连接请求。
语法
PFN_WSK_INSPECT_EVENT PfnWskInspectEvent;
WSK_INSPECT_ACTION PfnWskInspectEvent(
[in, optional] PVOID SocketContext,
[in] PSOCKADDR LocalAddress,
[in] PSOCKADDR RemoteAddress,
[in, optional] PWSK_INSPECT_ID InspectID
)
{...}
参数
[in, optional] SocketContext
指向接收传入连接请求的侦听套接字的套接字上下文的指针。 WSK 应用程序在调用 WskSocket 函数来创建侦听套接字时,向 WSK 子系统提供了此指针。
[in] LocalAddress
指向包含传入连接请求到达的本地传输地址的缓冲区的指针。 缓冲区包含与创建侦听套接字时指定的 WSK 应用程序指定的地址系列对应的特定 SOCKADDR 结构类型。
[in] RemoteAddress
指向包含传入连接请求发起的远程传输地址的缓冲区的指针。 缓冲区包含与创建侦听套接字时指定的 WSK 应用程序指定的地址系列对应的特定 SOCKADDR 结构类型。
[in, optional] InspectID
指向 WSK_INSPECT_ID 结构的指针。 结构的内容标识正在检查的传入连接请求。 如果此指针 NULL,则侦听套接字不再正常工作,并且 WSK 应用程序必须调用 WskCloseSocket 函数才能尽快关闭侦听套接字。
返回值
WSK 应用程序的 WskInspectEvent 事件回调函数可以返回以下WSK_INSPECT_ACTION值之一:
返回代码 | 描述 |
---|---|
|
接受传入的连接请求。 |
|
传入的连接请求被拒绝。 |
|
WSK 应用程序无法确定应立即接受或拒绝传入的连接请求。 |
言论
WSK 子系统在启用了条件接受模式的侦听套接字上调用 WSK 应用程序的 WskInspectEvent 事件回调函数。 WSK 应用程序可以通过启用 SO_CONDITIONAL_ACCEPT 套接字选项在侦听套接字上启用条件接受模式。 有关有条件地接受传入连接的详细信息,请参阅 侦听和接受传入连接。
如果 WSK 应用程序从 WskInspectEvent 事件回调函数返回 WskInspectAccept,WSK 子系统将继续建立套接字连接。 WSK 子系统通过完成对 WskAccept 函数的调用,或通过调用 WSK 应用程序的 WskAcceptEvent 事件回调函数(如果启用了事件回调函数)来返回 WSK 应用程序的套接字。 如果在完全建立套接字连接之前删除传入连接请求,WSK 子系统将调用 WSK 应用程序的 WskAbortEvent 事件回调函数。
如果 WSK 应用程序从 WskInspectEvent 事件回调函数返回 WskInspectReject,则会丢弃传入的连接请求,并且未建立套接字连接。
如果 WSK 应用程序从 WskInspectEvent 事件回调函数返回 WskInspectPend,则应用程序必须在确定传入连接请求是否应接受或拒绝后调用 WskInspectComplete 函数(除非传入的连接请求在此期间中止)。 WSK 应用程序必须在从 WskInspectEvent 事件回调函数返回之前,将 InspectID 参数指向的 WSK_INSPECT_ID 结构的内容复制到其自己的WSK_INSPECT_ID结构。 WSK 应用程序在完成检查时将指向其自己的WSK_INSPECT_ID结构的指针传递给 WskInspectComplete 函数。 如果请求在检查完成之前中止,WSK 应用程序还使用此结构来标识传入的连接请求。
SOCKADDR 结构,LocalAddress 和 RemoteAddress 参数所指向的结构仅在调用 WskInspectEvent 事件回调函数期间有效。 如果 WSK 应用程序从 WskInspectEvent 事件回调函数返回 WskInspectPend,并且需要在检查的剩余时间内需要这些传输地址,则必须在从 WskInspectEvent 事件回调函数返回之前,将这些结构的内容复制到自己的 SOCKADDR 结构。
WSK 子系统在 IRQL = DISPATCH_LEVEL 调用 WSK 应用程序的 < 事件回调函数。
WSK 应用程序的 WskInspectEvent 事件回调函数不得等待 WSK 完成或事件回调函数上下文中的其他 WSK 请求的完成。 回调可以启动其他 WSK 请求(假设它在DISPATCH_LEVEL花费的时间不太多),但即使在 IRQL = PASSIVE_LEVEL调用回调,它也不能等待完成。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 在 Windows Vista 和更高版本的 Windows作系统中可用。 |
目标平台 | 窗户 |
标头 | wsk.h (包括 Wsk.h) |
IRQL | <= DISPATCH_LEVEL |