- attempt to disable packet throttling on windows
- added some network packet debug code
This commit is contained in:
parent
21a12a6c72
commit
676a6071fa
|
@ -4287,6 +4287,16 @@ int glestMain(int argc, char** argv) {
|
||||||
config.setBool("DebugNetworkPackets",true,true);
|
config.setBool("DebugNetworkPackets",true,true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_DEBUG_NETWORK_PACKET_SIZES]) == true) {
|
||||||
|
printf("*NOTE: debugging network packet SIZES.\n");
|
||||||
|
config.setBool("DebugNetworkPacketSizes",true,true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_DEBUG_NETWORK_PACKET_STATS]) == true) {
|
||||||
|
printf("*NOTE: debugging network packet STATISTICS.\n");
|
||||||
|
config.setBool("DebugNetworkPacketStats",true,true);
|
||||||
|
}
|
||||||
|
|
||||||
if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_ENABLE_NEW_PROTOCOL]) == true) {
|
if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_ENABLE_NEW_PROTOCOL]) == true) {
|
||||||
printf("*NOTE: enabling new newtork protocol.\n");
|
printf("*NOTE: enabling new newtork protocol.\n");
|
||||||
NetworkMessage::useOldProtocol = false;
|
NetworkMessage::useOldProtocol = false;
|
||||||
|
|
|
@ -43,8 +43,8 @@ void NetworkManager::init(NetworkRole networkRole, bool publishEnabled) {
|
||||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] this->networkRole = %d, networkRole = %d, gameNetworkInterface [%p]\n",__FILE__,__FUNCTION__,__LINE__,this->networkRole,networkRole,gameNetworkInterface);
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] this->networkRole = %d, networkRole = %d, gameNetworkInterface [%p]\n",__FILE__,__FUNCTION__,__LINE__,this->networkRole,networkRole,gameNetworkInterface);
|
||||||
|
|
||||||
assert(gameNetworkInterface==NULL);
|
//assert(gameNetworkInterface==NULL);
|
||||||
|
NetworkMessage::resetNetworkPacketStats();
|
||||||
this->networkRole = networkRole;
|
this->networkRole = networkRole;
|
||||||
|
|
||||||
if(networkRole == nrServer) {
|
if(networkRole == nrServer) {
|
||||||
|
|
|
@ -33,6 +33,12 @@ namespace Glest{ namespace Game{
|
||||||
|
|
||||||
bool NetworkMessage::useOldProtocol = true;
|
bool NetworkMessage::useOldProtocol = true;
|
||||||
|
|
||||||
|
auto_ptr<Mutex> NetworkMessage::mutexMessageStats(new Mutex(CODE_AT_LINE));
|
||||||
|
Chrono NetworkMessage::statsTimer;
|
||||||
|
Chrono NetworkMessage::lastSend;
|
||||||
|
Chrono NetworkMessage::lastRecv;
|
||||||
|
std::map<NetworkMessageStatisticType,int64> NetworkMessage::mapMessageStats;
|
||||||
|
|
||||||
// =====================================================
|
// =====================================================
|
||||||
// class NetworkMessage
|
// class NetworkMessage
|
||||||
// =====================================================
|
// =====================================================
|
||||||
|
@ -54,7 +60,7 @@ bool NetworkMessage::receive(Socket* socket, void* data, int dataSize, bool tryR
|
||||||
else {
|
else {
|
||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] dataSize = %d, dataReceived = %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,dataSize,dataReceived);
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] dataSize = %d, dataReceived = %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,dataSize,dataReceived);
|
||||||
|
|
||||||
dump_packet("\nINCOMING PACKET:\n",data, dataSize);
|
dump_packet("\nINCOMING PACKET:\n",data, dataSize, false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -66,7 +72,7 @@ void NetworkMessage::send(Socket* socket, const void* data, int dataSize) {
|
||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] socket = %p, data = %p, dataSize = %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,socket,data,dataSize);
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] socket = %p, data = %p, dataSize = %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,socket,data,dataSize);
|
||||||
|
|
||||||
if(socket != NULL) {
|
if(socket != NULL) {
|
||||||
dump_packet("\nOUTGOING PACKET:\n",data, dataSize);
|
dump_packet("\nOUTGOING PACKET:\n",data, dataSize, true);
|
||||||
int sendResult = socket->send(data, dataSize);
|
int sendResult = socket->send(data, dataSize);
|
||||||
if(sendResult != dataSize) {
|
if(sendResult != dataSize) {
|
||||||
if(socket != NULL && socket->getSocketId() > 0) {
|
if(socket != NULL && socket->getSocketId() > 0) {
|
||||||
|
@ -81,19 +87,159 @@ void NetworkMessage::send(Socket* socket, const void* data, int dataSize) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkMessage::dump_packet(string label, const void* data, int dataSize) {
|
void NetworkMessage::resetNetworkPacketStats() {
|
||||||
Config &config = Config::getInstance();
|
NetworkMessage::statsTimer.stop();
|
||||||
if(config.getBool("DebugNetworkPackets","false") == true) {
|
NetworkMessage::lastSend.stop();
|
||||||
printf("%s",label.c_str());
|
NetworkMessage::lastRecv.stop();
|
||||||
|
NetworkMessage::mapMessageStats.clear();
|
||||||
|
}
|
||||||
|
|
||||||
const char *buf = static_cast<const char *>(data);
|
string NetworkMessage::getNetworkPacketStats() {
|
||||||
for(unsigned int i = 0; i < (unsigned int)dataSize; ++i) {
|
string result = "Current Timer Milliseconds: " + intToStr(NetworkMessage::statsTimer.getMillis()) + "\n";
|
||||||
printf("%u[%X][%d] ",i,buf[i],buf[i]);
|
|
||||||
if(i % 10 == 0) {
|
for(std::map<NetworkMessageStatisticType,int64>::iterator iterMap = mapMessageStats.begin();
|
||||||
printf("\n");
|
iterMap != mapMessageStats.end(); ++iterMap) {
|
||||||
|
switch(iterMap->first) {
|
||||||
|
case netmsgstPacketsPerMillisecondSend:
|
||||||
|
result += "send p / msec: " + intToStr(iterMap->second) + (iterMap->second > 10 ? " ****WARNING WIN32 LIMIT EXCEEDED****" : "") + "\n";
|
||||||
|
break;
|
||||||
|
case netmsgstPacketsPerSecondSend:
|
||||||
|
result += "send p / sec: " + intToStr(iterMap->second) + "\n";
|
||||||
|
break;
|
||||||
|
case netmsgstAverageSendSize:
|
||||||
|
result += "send avg size: " + intToStr(iterMap->second) + "\n";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case netmsgstPacketsPerMillisecondRecv:
|
||||||
|
result += "recv p / msec: " + intToStr(iterMap->second) + "\n";
|
||||||
|
break;
|
||||||
|
case netmsgstPacketsPerSecondRecv:
|
||||||
|
result += "recv p / sec: " + intToStr(iterMap->second) + (iterMap->second > 10 ? " ****WARNING WIN32 LIMIT EXCEEDED****" : "") + "\n";
|
||||||
|
break;
|
||||||
|
case netmsgstAverageRecvSize:
|
||||||
|
result += "recv avg size: " + intToStr(iterMap->second) + "\n";
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NetworkMessage::dump_packet(string label, const void* data, int dataSize, bool isSend) {
|
||||||
|
Config &config = Config::getInstance();
|
||||||
|
if( config.getBool("DebugNetworkPacketStats","false") == true) {
|
||||||
|
|
||||||
|
MutexSafeWrapper safeMutex(NetworkMessage::mutexMessageStats.get());
|
||||||
|
|
||||||
|
if(NetworkMessage::statsTimer.isStarted() == false) {
|
||||||
|
NetworkMessage::statsTimer.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool secondChanged = false;
|
||||||
|
if(NetworkMessage::statsTimer.getSeconds() - NetworkMessage::mapMessageStats[netmsgstLastEvent] >= 3) {
|
||||||
|
|
||||||
|
NetworkMessage::mapMessageStats[netmsgstLastEvent] = NetworkMessage::statsTimer.getSeconds();
|
||||||
|
secondChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isSend == true) {
|
||||||
|
if(NetworkMessage::lastSend.isStarted() == false) {
|
||||||
|
NetworkMessage::lastSend.start();
|
||||||
|
}
|
||||||
|
int64 millisecondsSinceLastSend = NetworkMessage::lastSend.getMillis();
|
||||||
|
int64 secondsSinceLastSend = NetworkMessage::lastSend.getSeconds();
|
||||||
|
|
||||||
|
//char szBuf[8096]="";
|
||||||
|
//snprintf(szBuf,8095,"\nSEND check cur [%lld] last [%lld]\n", (long long)millisecondsSinceLastSend,(long long)NetworkMessage::mapMessageStats[netmsgstPacketsPerMillisecondSend_last] );
|
||||||
|
//printf("%s",szBuf);
|
||||||
|
|
||||||
|
if(millisecondsSinceLastSend == NetworkMessage::mapMessageStats[netmsgstPacketsPerMillisecondSend_last]) {
|
||||||
|
NetworkMessage::mapMessageStats[netmsgstPacketsPerMillisecondSend_current_count]++;
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
NetworkMessage::mapMessageStats[netmsgstPacketsPerMillisecondSend_last] = millisecondsSinceLastSend;
|
||||||
|
NetworkMessage::mapMessageStats[netmsgstPacketsPerMillisecondSend] =
|
||||||
|
(NetworkMessage::mapMessageStats[netmsgstPacketsPerMillisecondSend] +
|
||||||
|
NetworkMessage::mapMessageStats[netmsgstPacketsPerMillisecondSend_current_count]) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(secondsSinceLastSend == NetworkMessage::mapMessageStats[netmsgstPacketsPerSecondSend_last]) {
|
||||||
|
NetworkMessage::mapMessageStats[netmsgstPacketsPerSecondSend_current_count]++;
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
NetworkMessage::mapMessageStats[netmsgstPacketsPerSecondSend_last] = secondsSinceLastSend;
|
||||||
|
NetworkMessage::mapMessageStats[netmsgstPacketsPerSecondSend] =
|
||||||
|
(NetworkMessage::mapMessageStats[netmsgstPacketsPerSecondSend] +
|
||||||
|
NetworkMessage::mapMessageStats[netmsgstPacketsPerSecondSend_current_count]) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
NetworkMessage::mapMessageStats[netmsgstAverageSendSize] =
|
||||||
|
(NetworkMessage::mapMessageStats[netmsgstAverageSendSize] +
|
||||||
|
dataSize) / 2;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(NetworkMessage::lastRecv.isStarted() == false) {
|
||||||
|
NetworkMessage::lastRecv.start();
|
||||||
|
}
|
||||||
|
int64 millisecondsSinceLastRecv = NetworkMessage::lastRecv.getMillis();
|
||||||
|
int64 secondsSinceLastRecv = NetworkMessage::lastRecv.getSeconds();
|
||||||
|
|
||||||
|
//char szBuf[8096]="";
|
||||||
|
//snprintf(szBuf,8095,"\nRECV check cur [%lld] last [%lld]\n", (long long)millisecondsSinceLastRecv,(long long)NetworkMessage::mapMessageStats[netmsgstPacketsPerMillisecondRecv_last] );
|
||||||
|
//printf("%s",szBuf);
|
||||||
|
|
||||||
|
if(millisecondsSinceLastRecv == NetworkMessage::mapMessageStats[netmsgstPacketsPerMillisecondRecv_last]) {
|
||||||
|
NetworkMessage::mapMessageStats[netmsgstPacketsPerMillisecondRecv_current_count]++;
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
NetworkMessage::mapMessageStats[netmsgstPacketsPerMillisecondRecv_last] = millisecondsSinceLastRecv;
|
||||||
|
NetworkMessage::mapMessageStats[netmsgstPacketsPerMillisecondRecv] =
|
||||||
|
(NetworkMessage::mapMessageStats[netmsgstPacketsPerMillisecondRecv] +
|
||||||
|
NetworkMessage::mapMessageStats[netmsgstPacketsPerMillisecondRecv_current_count]) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(secondsSinceLastRecv == NetworkMessage::mapMessageStats[netmsgstPacketsPerSecondRecv_last]) {
|
||||||
|
NetworkMessage::mapMessageStats[netmsgstPacketsPerSecondRecv_current_count]++;
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
NetworkMessage::mapMessageStats[netmsgstPacketsPerSecondRecv_last] = secondsSinceLastRecv;
|
||||||
|
NetworkMessage::mapMessageStats[netmsgstPacketsPerSecondRecv] =
|
||||||
|
(NetworkMessage::mapMessageStats[netmsgstPacketsPerSecondRecv] +
|
||||||
|
NetworkMessage::mapMessageStats[netmsgstPacketsPerSecondRecv_current_count]) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
NetworkMessage::mapMessageStats[netmsgstAverageRecvSize] =
|
||||||
|
(NetworkMessage::mapMessageStats[netmsgstAverageRecvSize] +
|
||||||
|
dataSize) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(secondChanged == true) {
|
||||||
|
printf("%s",NetworkMessage::getNetworkPacketStats().c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( config.getBool("DebugNetworkPackets","false") == true ||
|
||||||
|
config.getBool("DebugNetworkPacketSizes","false") == true) {
|
||||||
|
|
||||||
|
printf("%s DataSize = %d",label.c_str(),dataSize);
|
||||||
|
|
||||||
|
if(config.getBool("DebugNetworkPackets","false") == true) {
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
const char *buf = static_cast<const char *>(data);
|
||||||
|
for(unsigned int index = 0; index < (unsigned int)dataSize; ++index) {
|
||||||
|
|
||||||
|
printf("%u[%X][%d] ",index,buf[index],buf[index]);
|
||||||
|
if(index % 10 == 0) {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf("\n== END ==\n");
|
printf("\n======= END =======\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include "game_constants.h"
|
#include "game_constants.h"
|
||||||
#include "network_types.h"
|
#include "network_types.h"
|
||||||
#include "byte_order.h"
|
#include "byte_order.h"
|
||||||
|
#include <map>
|
||||||
|
|
||||||
#include "leak_dumper.h"
|
#include "leak_dumper.h"
|
||||||
|
|
||||||
|
@ -66,15 +67,52 @@ static const int maxLanguageStringSize= 60;
|
||||||
// class NetworkMessage
|
// class NetworkMessage
|
||||||
// =====================================================
|
// =====================================================
|
||||||
|
|
||||||
|
enum NetworkMessageStatisticType {
|
||||||
|
netmsgstPacketsPerMillisecondSend,
|
||||||
|
netmsgstPacketsPerMillisecondSend_current_count,
|
||||||
|
netmsgstPacketsPerMillisecondSend_last,
|
||||||
|
|
||||||
|
netmsgstPacketsPerSecondSend,
|
||||||
|
netmsgstPacketsPerSecondSend_current_count,
|
||||||
|
netmsgstPacketsPerSecondSend_last,
|
||||||
|
|
||||||
|
netmsgstAverageSendSize,
|
||||||
|
|
||||||
|
// ---------------------------------------------
|
||||||
|
netmsgstPacketsPerMillisecondRecv,
|
||||||
|
netmsgstPacketsPerMillisecondRecv_current_count,
|
||||||
|
netmsgstPacketsPerMillisecondRecv_last,
|
||||||
|
|
||||||
|
netmsgstPacketsPerSecondRecv,
|
||||||
|
netmsgstPacketsPerSecondRecv_current_count,
|
||||||
|
netmsgstPacketsPerSecondRecv_last,
|
||||||
|
|
||||||
|
netmsgstAverageRecvSize,
|
||||||
|
|
||||||
|
netmsgstLastEvent
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
class NetworkMessage {
|
class NetworkMessage {
|
||||||
|
private:
|
||||||
|
|
||||||
|
static auto_ptr<Mutex> mutexMessageStats;
|
||||||
|
static Chrono statsTimer;
|
||||||
|
static Chrono lastSend;
|
||||||
|
static Chrono lastRecv;
|
||||||
|
static std::map<NetworkMessageStatisticType,int64> mapMessageStats;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
static void resetNetworkPacketStats();
|
||||||
|
static string getNetworkPacketStats();
|
||||||
|
|
||||||
static bool useOldProtocol;
|
static bool useOldProtocol;
|
||||||
virtual ~NetworkMessage(){}
|
virtual ~NetworkMessage(){}
|
||||||
virtual bool receive(Socket* socket)= 0;
|
virtual bool receive(Socket* socket)= 0;
|
||||||
virtual void send(Socket* socket) = 0;
|
virtual void send(Socket* socket) = 0;
|
||||||
virtual size_t getDataSize() const = 0;
|
virtual size_t getDataSize() const = 0;
|
||||||
|
|
||||||
void dump_packet(string label, const void* data, int dataSize);
|
void dump_packet(string label, const void* data, int dataSize, bool isSend);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//bool peek(Socket* socket, void* data, int dataSize);
|
//bool peek(Socket* socket, void* data, int dataSize);
|
||||||
|
|
|
@ -93,6 +93,8 @@ const char *GAME_ARGS[] = {
|
||||||
"--disable-opengl-checks",
|
"--disable-opengl-checks",
|
||||||
"--disable-streflop-checks",
|
"--disable-streflop-checks",
|
||||||
"--debug-network-packets",
|
"--debug-network-packets",
|
||||||
|
"--debug-network-packet-sizes",
|
||||||
|
"--debug-network-packet-stats",
|
||||||
"--enable-new-protocol",
|
"--enable-new-protocol",
|
||||||
|
|
||||||
"--create-data-archives",
|
"--create-data-archives",
|
||||||
|
@ -175,6 +177,8 @@ enum GAME_ARG_TYPE {
|
||||||
GAME_ARG_DISABLE_STREFLOP_CAPS_CHECK,
|
GAME_ARG_DISABLE_STREFLOP_CAPS_CHECK,
|
||||||
|
|
||||||
GAME_ARG_DEBUG_NETWORK_PACKETS,
|
GAME_ARG_DEBUG_NETWORK_PACKETS,
|
||||||
|
GAME_ARG_DEBUG_NETWORK_PACKET_SIZES,
|
||||||
|
GAME_ARG_DEBUG_NETWORK_PACKET_STATS,
|
||||||
GAME_ARG_ENABLE_NEW_PROTOCOL,
|
GAME_ARG_ENABLE_NEW_PROTOCOL,
|
||||||
|
|
||||||
GAME_ARG_CREATE_DATA_ARCHIVES,
|
GAME_ARG_CREATE_DATA_ARCHIVES,
|
||||||
|
|
|
@ -89,6 +89,21 @@ Mutex UPNP_Tools::mutexUPNP;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
|
||||||
|
void DisablePacketThrottling() {
|
||||||
|
//Open the registry key.
|
||||||
|
wstring subKey = L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Multimedia\\SystemProfile";
|
||||||
|
HKEY keyHandle;
|
||||||
|
DWORD dwDisposition;
|
||||||
|
RegCreateKeyEx(HKEY_CURRENT_USER,subKey.c_str(),0, NULL, 0, KEY_ALL_ACCESS, NULL, &keyHandle, &dwDisposition);
|
||||||
|
//Set the value.
|
||||||
|
|
||||||
|
DWORD disableThrottle = 0xffffffff;
|
||||||
|
DWORD len = sizeof(disableThrottle);
|
||||||
|
RegSetValueEx(keyHandle, l"NetworkThrottlingIndex", 0, REG_DWORD, &disableThrottle, len);
|
||||||
|
RegCloseKey(keyHandle);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#define socklen_t int
|
#define socklen_t int
|
||||||
#define MAXHOSTNAME 254
|
#define MAXHOSTNAME 254
|
||||||
|
|
||||||
|
@ -227,6 +242,7 @@ Mutex UPNP_Tools::mutexUPNP;
|
||||||
SocketManager Socket::wsaManager;
|
SocketManager Socket::wsaManager;
|
||||||
|
|
||||||
SocketManager::SocketManager() {
|
SocketManager::SocketManager() {
|
||||||
|
DisablePacketThrottling();
|
||||||
WSADATA wsaData;
|
WSADATA wsaData;
|
||||||
WORD wVersionRequested = MAKEWORD(2, 0);
|
WORD wVersionRequested = MAKEWORD(2, 0);
|
||||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("SocketManager calling WSAStartup...\n");
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("SocketManager calling WSAStartup...\n");
|
||||||
|
|
Loading…
Reference in New Issue