PFN_WSK_CLOSE_SOCKET回调函数 (wsk.h)

WskCloseSocket 函数关闭套接字并释放任何关联的资源。

语法

PFN_WSK_CLOSE_SOCKET PfnWskCloseSocket;

NTSTATUS PfnWskCloseSocket(
  [in]      PWSK_SOCKET Socket,
  [in, out] PIRP Irp
)
{...}

参数

[in] Socket

指向 WSK_SOCKET 结构的指针,该结构指定正在关闭的套接字的套接字对象。

[in, out] Irp

指向调用方分配的 IRP 的指针,WSK 子系统使用该指针以异步方式完成关闭操作。 有关将 IRP 与 WSK 函数配合使用的详细信息,请参阅 将 IRP 与 Winsock 内核函数配合使用

返回值

WskCloseSocket 返回以下 NTSTATUS 代码之一:

返回代码 说明
STATUS_SUCCESS
已成功关闭套接字。 IRP 将以成功状态完成。
STATUS_PENDING
WSK 子系统无法立即关闭套接字。 WSK 子系统将在关闭套接字后完成 IRP。 关闭操作的状态将在 IRP 的 IoStatus.Status 字段中返回。
其他状态代码
出现了错误。 IRP 将以失败状态完成。

注解

在调用 WskCloseSocket 函数之前,WSK 应用程序必须确保没有任何其他函数正在调用任何套接字的函数,包括应用程序的其他任何线程中的任何扩展函数。 例如,当应用程序在另一个线程中的同一个套接字上调用 WskSend 时,WSK 应用程序不得在一个线程中的套接字上调用 WskCloseSocket 。 对套接字函数的任何正在进行的调用都必须在调用 WskCloseSocket 以关闭套接字之前将控制权返回到 WSK 应用程序。 但是,如果对套接字函数的先前调用中存在尚未完成的挂起 IRP,则 WSK 应用程序可以调用 WskCloseSocket

调用 WskCloseSocket 函数会导致 WSK 子系统取消并完成之前调用套接字函数的所有挂起的 IRP。 WSK 子系统还确保任何正在进行的事件回调函数在关闭套接字之前已将控制权返回到 WSK 子系统。

在 WSK 应用程序调用 WskCloseSocket 后,它不应对套接字的任何函数进行任何进一步调用。

如果 WSK 应用程序将安全描述符应用于套接字,则当套接字关闭时,不会释放在调用 WskSocketWskSocketWskControlSocket 中指定的安全描述符的缓存副本。 当不再需要安全描述符时,WSK 应用程序必须使用 WSK_RELEASE_SD 客户端控制操作释放安全描述符的缓存副本。

WSK 子系统解除分配套接字对象的内存 ,WSK_SOCKET,该对象在创建套接字时由 WSK 子系统分配。

对于面向连接的套接字, WskCloseSocket 函数始终执行套接字的中止断开连接,除非套接字已在两个方向上完全断开连接。 若要正常断开面向连接的套接字与远程传输地址的连接,WSK 应用程序应调用 WskDisconnect 函数。

要求

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

另请参阅

WSK_PROVIDER_BASIC_DISPATCH

WSK_PROVIDER_CONNECTION_DISPATCH WSK_PROVIDER_DATAGRAM_DISPATCH

WSK_PROVIDER_LISTEN_DISPATCH

WSK_SOCKET

WskControlSocket

WskDisconnect

WskSocket

WskSocketConnect