WSACleanup 函数 (winsock.h)
WSACleanup 函数终止使用 Winsock 2 DLL (Ws2_32.dll) 。
语法
int WSACleanup();
返回值
如果操作成功,则返回值为零。 否则,将返回值SOCKET_ERROR,并且可以通过调用 WSAGetLastError 检索特定的错误号。
在多线程环境中, WSACleanup 终止所有线程的 Windows 套接字操作。
错误代码 | 含义 |
---|---|
在使用此函数之前,必须成功调用 WSAStartup 。 | |
网络子系统发生故障。 | |
阻止 Windows 套接字 1.1 调用正在进行,或者服务提供商仍在处理回调函数。 |
注解
应用程序或 DLL 需要执行成功的 WSAStartup 调用,然后才能使用 Windows 套接字服务。 完成 Windows 套接字的使用后,应用程序或 DLL 必须调用 WSACleanup 以从 Windows 套接字实现中注销自身,并允许实现释放代表应用程序或 DLL 分配的任何资源。
调用 WSACleanup 时,将取消此进程中任何线程发出的任何挂起的阻止或异步 Windows 套接字调用,而不会发布任何通知消息或发出任何事件对象的信号。 (WSASend、WSASendTo、WSARecv 或 WSARecvFrom 的任何挂起的重叠发送或接收操作(例如,此进程中任何线程发出的) )也会被取消,而无需设置事件对象或调用完成例程(如果指定了一个)。 在这种情况下,挂起的重叠操作会失败,WSA_OPERATION_ABORTED错误状态。
调用 WSACleanup 时打开的套接字将重置并自动解除分配,就像调用 closesocket 一样。 调用 WSACleanup 时,已使用 closesocket 关闭但仍具有待发送数据的套接字可能会受到影响。 在这种情况下,如果在应用程序退出时从内存中卸载 WS2_32.DLL,则挂起的数据可能会丢失。 为了确保发送所有挂起的数据,应用程序应使用 关闭 来关闭连接,然后等待关闭完成,然后再调用 closesocket 和 WSACleanup。 必须解除分配所有资源和内部状态(如排队未发布或已发布的消息),以便可供下一个用户使用。
每次成功调用 WSAStartup 时,都必须调用 WSACleanup。 只有最终 的 WSACleanup 函数调用才会执行实际清理。 前面的调用只是递减 WS2_32.DLL 中的内部引用计数。
WSACleanup 函数通常会导致卸载特定于协议的帮助程序 DLL。 因此,不应从应用程序 DLL 中的 DllMain 函数调用 WSACleanup 函数。 这可能会导致死锁。 有关详细信息,请参阅 DLL 主函数。
Windows Phone 8:Windows Phone 8 及更高版本上的 Windows Phone 应用商店应用支持此函数。
Windows 8.1和Windows Server 2012 R2:Windows 8.1、Windows Server 2012 R2 及更高版本的 Windows 应用商店应用支持此函数。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 8.1,Windows Vista [桌面应用 |UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | winsock.h (包括 Winsock2.h) |
Library | Ws2_32.lib |
DLL | Ws2_32.dll |