PFN_WSK_INSPECT_EVENT回调函数 (wsk.h)

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值之一:

返回代码 说明
WskInspectAccept
接受传入的连接请求。
WskInspectReject
传入的连接请求被拒绝。
WskInspectPend
WSK 应用程序无法确定应立即接受还是拒绝传入的连接请求。

注解

WSK 子系统在启用了条件接受模式的侦听套接字上调用 WSK 应用程序的 WskInspectEvent 事件回调函数。 WSK 应用程序可以通过启用 SO_CONDITIONAL_ACCEPT 套接字选项在侦听套接字上启用条件接受模式。 有关有条件地接受传入连接的详细信息,请参阅侦听和接受传入Connections

如果 WSK 应用程序从其 WskInspectEvent 事件回调函数返回 WskInspectAccept ,则 WSK 子系统将继续建立套接字连接。 WSK 子系统通过完成对 WskAccept 函数的调用,或通过调用 WSK 应用程序的 WskAcceptEvent 事件回调函数(如果启用了事件回调函数),将套接字返回到 WSK 应用程序。 如果在完全建立套接字连接之前删除了传入的连接请求,则 WSK 子系统将调用 WSK 应用程序的 WskAbortEvent 事件回调函数。

如果 WSK 应用程序从其 WskInspectEvent 事件回调函数返回 WskInspectReject ,则会删除传入的连接请求,并且未建立套接字连接。

如果 WSK 应用程序从其 WskInspectEvent 事件回调函数返回 WskInspectPend ,则应用程序必须在确定应接受还是拒绝传入连接请求 (后调用 WskInspectComplete 函数,除非传入连接请求在) 同时中止。 在从 WskInspectEvent 事件回调函数返回之前,WSK 应用程序必须将 InspectID 参数指向的 WSK_INSPECT_ID 结构的内容复制到其自己的WSK_INSPECT_ID结构。 WSK 应用程序在完成检查时将指向其自己的 WSK_INSPECT_ID 结构的指针传递给 WskInspectComplete 函数。 如果请求在检查完成之前中止,WSK 应用程序还使用此结构来标识传入的连接请求。

LocalAddress 和 RemoteAddress 参数指向的 SOCKADDR 结构仅在调用 WskInspectEvent 事件回调函数期间有效。 如果 WSK 应用程序从其 WskInspectEvent 事件回调函数返回 WskInspectPend ,并在检查的余下时间需要这些传输地址,则在从 WskInspectEvent 事件回调函数返回之前,它必须将这些结构的内容复制到其自己的 SOCKADDR 结构。

WSK 子系统在 IRQL <= DISPATCH_LEVEL 调用 WSK 应用程序的 WskInspectEvent 事件回调函数。

WSK 应用程序的 WskInspectEvent 事件回调函数不得等待 WSK 完成函数或事件回调函数上下文中其他 WSK 请求完成。 回调可以启动其他 WSK 请求, (假设它不会在DISPATCH_LEVEL) 花费太多时间,但它不得等待其完成,即使在 IRQL = PASSIVE_LEVEL 调用回调时也是如此。

要求

要求
最低受支持的客户端 在 Windows Vista 和更高版本的 Windows 操作系统中可用。
目标平台 Windows
标头 wsk.h (包括 Wsk.h)
IRQL <= DISPATCH_LEVEL

另请参阅

SOCKADDR

WSK_CLIENT_LISTEN_DISPATCH

WSK_INSPECT_ID

WskAbortEvent

WskAccept

WskAcceptEvent

WskCloseSocket

WskControlSocket

WskInspectComplete

WskSocket