我已经开始编写一个使用套接字的ActiveX控件。
使用此控件的应用程序可以使用套接字,也可以不使用套接字。我的控件是否可以判断是否调用了WSAStartup?
如果没有,就调用它。一个小测试显示多次调用WSAStartup是收费的。但是,如果请求不同的winsock版本,会发生什么呢?这会破坏应用程序的其他部分吗?
发布于 2009-12-09 11:37:40
是的,这是可能的。
这就是它是如何做到的。
bool WinsockInitialized()
{
SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (s == INVALID_SOCKET){
return false;
}
closesocket(s);
return true;
}
int main()
{
//...
if ( !WinsockInitialized() )
// Init winsock here...
// Carry on as normal.
// ...
}但这并不是真的需要这样做。在任何时候调用WSAStartup都是非常安全的。以匹配的WSACleanup()调用结束每个成功的WSAStartup()调用也是安全的。
例如:
// socket calls here would be an error, not initialized
WSAStartup(...)
// socket calls here OK
WSAStartup(...)
// more socket calls OK
WSACleanup()
// socket calls OK
WSACleanup()
// more socket calls error, not initialized发布于 2009-12-09 09:19:05
WSAStartup()是否已被调用。WSAStartup()。对WSAStartup()和WSACleanup()的调用必须是balanced.WSAStartup()返回的信息,以确保它满足您的应用程序的要求。WSAStartup()调用的影响。允许使用不同WinSock版本的有关详细信息,请参阅the WSAStartup() documentation。
https://stackoverflow.com/questions/1869689
复制相似问题