ThreadReturnType TCPConnection::TCPConnectionLoop(void* tmp) { #ifdef _WINDOWS SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL); #endif if (tmp == 0) { THREAD_RETURN(NULL); } TCPConnection* tcpc = (TCPConnection*) tmp; #ifndef WIN32 _log(COMMON__THREADS, "Starting TCPConnectionLoop with thread ID %d", pthread_self()); #endif tcpc->MLoopRunning.lock(); while (tcpc->RunLoop()) { Sleep(LOOP_GRANULARITY); if (!tcpc->ConnectReady()) { _CP(TCPConnectionLoop); if (!tcpc->Process()) { //the processing loop has detecting an error.. //we want to drop the link immediately, so we clear buffers too. tcpc->ClearBuffers(); tcpc->Disconnect(); } Sleep(1); } else if (tcpc->GetAsyncConnect()) { _CP(TCPConnectionLoop); if (tcpc->charAsyncConnect) tcpc->Connect(tcpc->charAsyncConnect, tcpc->GetrPort()); else tcpc->ConnectIP(tcpc->GetrIP(), tcpc->GetrPort()); tcpc->SetAsyncConnect(false); } else Sleep(10); //nothing to do. } tcpc->MLoopRunning.unlock(); #ifndef WIN32 _log(COMMON__THREADS, "Ending TCPConnectionLoop with thread ID %d", pthread_self()); #endif THREAD_RETURN(NULL); }