我已经开始编写一个使用套接字的 ActiveX 控件。
使用此控件的应用程序可能也可能不使用套接字。 我的控件是否可以判断 WSAStartup 是否已被调用?
如果没有,调用它。一个小测试表明多次调用 WSAStartup 是可以接受的。 但是如果请求不同的 winsock 版本会发生什么?这会破坏应用程序的其他部分吗?
最佳答案
是的,这是可能的。
这是它是如何完成的。
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
关于windows - 是否可以判断进程中是否调用了 WSAStartup?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1869689/