はい、可能です。
そして、これがその方法です。
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を呼び出すのは非常に安全です。また、WSAStartup()への正常な呼び出しを、WSACleanup()への一致する呼び出しで終了することも安全です。
例えば
// 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