WSAStartup和WSACleanup的成本是多少?

时间:2008-12-28 18:12:05

标签: sockets winapi tcp wsastartup wsacleanup

我有一个c ++ win32程序,它使用套接字从服务器下载一些数据。

在Windows上使用套接字之前,必须调用WSAStartup。 MSDN说:“每次成功调用WSAStartup都必须调用WSACleanup。只有最后的WSACleanup函数调用执行实际的清理。”

对我来说最简单的方法是每次从服务器下载数据时调用WSAStartup / WSACleanup。大多数情况下,一次只有一个连接,因此WSACleanup将执行实际的清理。

这就是为什么我想知道WSAStartup和WSACleanup的成本是多少?我的意思是进行实际清理。如果对WSAStartup和WSACleanup的调用与整个套接字连接相比只持续很短的时间,那么我可以使用简单的方法。如果没有,我应该在退出程序时注意调用WSACleanup。

3 个答案:

答案 0 :(得分:13)

WSAStartup()加载必要的dll。但是如果已经加载了dll,WSAStartup()只会增加一个计数器。 WSACleanup()减少计数器并在计数器达到零时释放dll。

您应该在退出应用程序之前在应用程序的init函数中调用WSAStartup(),并调用WSACleanup()。

答案 1 :(得分:3)

使用RAII仅在应用程序启动时加载它们,然后在退出时释放它们...

答案 2 :(得分:2)

只需调用一次WSAStartup,就不要清理。说真的,这是Win3.1和Win32s的剩余架构。