in nlsCppSdk/transport/nlsEventNetWork.cpp [78:159]
void NlsEventNetWork::initEventNetWork(NlsClientImpl *instance, int count,
char *aiFamily, char *directIp,
bool sysGetAddr,
unsigned int syncCallTimeoutMs) {
MUTEX_LOCK(_mtxThread);
#if defined(_MSC_VER)
#ifdef EVTHREAD_USE_WINDOWS_THREADS_IMPLEMENTED
LOG_DEBUG("evthread_use_windows_thread.");
int ret = evthread_use_windows_threads();
#endif
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 2);
(void)WSAStartup(wVersionRequested, &wsaData);
#else
LOG_DEBUG("evthread_use_pthreads.");
int ret = evthread_use_pthreads();
#endif
if (ret != Success) {
LOG_ERROR("Invoke evthread_use_pthreads failed, ret:%d.", ret);
MUTEX_UNLOCK(_mtxThread);
exit(1);
}
#ifdef ENABLE_NLS_DEBUG
evthread_enable_lock_debugging();
#endif
_instance = instance;
_addrInFamily = AF_INET;
if (aiFamily != NULL) {
if (strncmp(aiFamily, "AF_INET", 16) == 0) {
_addrInFamily = AF_INET;
} else if (strncmp(aiFamily, "AF_INET6", 16) == 0) {
_addrInFamily = AF_INET6;
} else if (strncmp(aiFamily, "AF_UNSPEC", 16) == 0) {
_addrInFamily = AF_UNSPEC;
}
LOG_INFO("Set sockaddr_in type: %s.", aiFamily);
}
memset(_directIp, 0, 64);
if (directIp) {
strncpy(_directIp, directIp, 64);
}
_enableSysGetAddr = sysGetAddr;
_syncCallTimeoutMs = syncCallTimeoutMs;
#if defined(_MSC_VER)
SYSTEM_INFO sysInfo;
GetSystemInfo(&sysInfo);
int cpuNumber = (int)sysInfo.dwNumberOfProcessors;
#elif defined(__linux__) || defined(__ANDROID__)
int cpuNumber = (int)sysconf(_SC_NPROCESSORS_ONLN);
#endif
#if defined(_MSC_VER)
WorkThread::_mtxCpu = CreateMutex(NULL, FALSE, NULL);
#else
pthread_mutex_init(&WorkThread::_mtxCpu, NULL);
#endif
if (count <= 0) {
_workThreadsNumber = cpuNumber;
} else {
_workThreadsNumber = count;
}
LOG_INFO("Work threads number: %d.", _workThreadsNumber);
_workThreadArray = new WorkThread[_workThreadsNumber];
evdns_set_log_fn(DnsLogCb);
event_set_log_callback(EventLogCb);
MUTEX_UNLOCK(_mtxThread);
LOG_INFO("Init NlsEventNetWork done.");
return;
}