我有一个c ++ win32程序,它使用套接字从服务器下载一些数据。
在Windows上使用套接字之前,必须调用WSAStartup。 MSDN说:“每次成功调用WSAStartup都必须调用WSACleanup。只有最后的WSACleanup函数调用执行实际的清理。”
对我来说最简单的方法是每次从服务器下载数据时调用WSAStartup / WSACleanup。大多数情况下,一次只有一个连接,因此WSACleanup将执行实际的清理。
这就是为什么我想知道WSAStartup和WSACleanup的成本是多少?我的意思是进行实际清理。如果对WSAStartup和WSACleanup的调用与整个套接字连接相比只持续很短的时间,那么我可以使用简单的方法。如果没有,我应该在退出程序时注意调用WSACleanup。
答案 0 :(得分:13)
WSAStartup()加载必要的dll。但是如果已经加载了dll,WSAStartup()只会增加一个计数器。 WSACleanup()减少计数器并在计数器达到零时释放dll。
您应该在退出应用程序之前在应用程序的init函数中调用WSAStartup(),并调用WSACleanup()。
答案 1 :(得分:3)
使用RAII仅在应用程序启动时加载它们,然后在退出时释放它们...
答案 2 :(得分:2)
只需调用一次WSAStartup,就不要清理。说真的,这是Win3.1和Win32s的剩余架构。