rewrite tapserver interface for better error handling

This commit is contained in:
Martin Michelsen
2023-10-14 17:52:26 -07:00
parent a36600ae50
commit 083116a89c
6 changed files with 223 additions and 57 deletions

View File

@ -8,12 +8,27 @@ namespace Common
#ifdef _WIN32
SocketContext::SocketContext()
{
static_cast<void>(WSAStartup(MAKEWORD(2, 2), &m_data));
std::lock_guard<std::mutex> g(s_lock);
if (s_num_objects == 0)
{
static_cast<void>(WSAStartup(MAKEWORD(2, 2), &s_data));
}
s_num_objects++;
}
SocketContext::~SocketContext()
{
WSACleanup();
std::lock_guard<std::mutex> g(s_lock);
s_num_objects--;
if (s_num_objects == 0)
{
WSACleanup();
}
}
std::mutex SocketContext::s_lock;
size_t SocketContext::s_num_objects = 0;
WSADATA SocketContext::s_data;
#else
SocketContext::SocketContext() = default;
SocketContext::~SocketContext() = default;

View File

@ -5,6 +5,7 @@
#ifdef _WIN32
#include <WinSock2.h>
#include <mutex>
#endif
namespace Common
@ -23,7 +24,9 @@ public:
private:
#ifdef _WIN32
WSADATA m_data;
static std::mutex s_lock;
static size_t s_num_objects;
static WSADATA s_data;
#endif
};
} // namespace Common