LPWSPCLEANUP 回调函数 (ws2spi.h)

LPWSPCleanup 函数终止使用 Windows 套接字服务提供程序。

语法

LPWSPCLEANUP Lpwspcleanup;

int Lpwspcleanup(
  [out] LPINT lpErrno
)
{...}

参数

[out] lpErrno

指向错误代码的指针。

返回值

如果操作已成功启动,则返回值为零。 否则,将返回值SOCKET_ERROR,并在 lpErrno 中提供特定的错误号。

错误代码 含义
WSANOTINITIALISED
在使用此函数之前,必须进行成功的 WSPStartup 调用。
WSAENETDOWN
网络子系统失败。
WSAEINVAL
提供给名称空间提供程序的提供程序标识符不由名称空间提供程序管理。

注解

需要 Windows 套接字 2 SPI 客户端才能成功执行 WSPStartup 调用,然后才能使用 Winsock 服务提供程序。 在完成 Winsock 服务提供程序的使用后,SPI 客户端将调用 LPWSPCleanup 以从 Winsock 服务提供商取消注册自身,并允许服务提供商释放代表 Windows 套接字 2 客户端分配的任何资源。 SPI 客户端允许进行多个 WSPStartup 调用。 对于每个 WSPStartup 调用,还将发出相应的 LPWSPCleanup 调用。 只有服务提供商的最终 LPWSPCleanup 执行实际清理;前面的调用只是递减 Winsock 服务提供程序中的内部引用计数。

当内部引用计数达到零且实际清理操作开始时,将取消此进程中任何线程发出的任何挂起阻塞或异步调用,而无需发布任何通知消息或发出任何事件对象的信号。 此进程中任何线程发出的具有重叠套接字) 的挂起重叠发送和接收操作 (LPWSPSendLPWSPSendToLPWSPRecv、LPWSPRecvFrom(如果指定)也会被取消。 在这种情况下,挂起的重叠操作失败,错误状态WSA_OPERATION_ABORTED。 调用 LPWSPCleanup 时打开的任何套接字都会重置并自动解除分配,就像调用 了 LPWSPCloseSocket 一样;已使用 LPWSPCloseSocket 关闭但仍有待发送数据的套接字不受影响,但仍会发送挂起的数据。

在准备好从内存中卸载服务提供程序 DLL 之前,此函数不应返回 。 具体而言,要传输的任何剩余数据必须已发送,或者已排队等待传输堆栈部分的传输,这些部分不会与服务提供商的 DLL 一起从内存中卸载。

Winsock 服务提供商必须准备好处理一个进程,该进程在没有调用 LPWSPCleanup (的情况下终止,例如,由于错误) 。 Winsock 服务提供商必须确保 LPWSPCleanup 使内容处于 Ws2_32.dll 可以立即调用 WSPStartup 以重新建立 Winsock 使用情况的状态。

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
标头 ws2spi.h

另请参阅

LPWSPCloseSocket

LPWSPShutdown

WSPStartup