int main(int argc, char** argv) { if(!DbInit()){ cout<<"DbInit() failed!"<<endl; exit(-1); } cout<<"BDB init finished!"<<endl; MSocket server; int port=PORT; if(server.Create()==false){ cout<<"socket create error"<<endl; return 0; } //server.SetNonblock(false); if(server.Bind(port) != 0){ cout<<"socket bind error!"<<endl; return 0; } if(server.Listen()!=0){ cout<<"socket listen error"<<endl; return 0; } MThread threadPool[THREAD_MAX]; for(int i=0;i<THREAD_MAX;i++){ threadPool[i].Create(handleClientThread,(void*)&threadPool[i]); } MSocket* pclient=NULL; while(true){ pclient=server.Accept(); //pclient need to be deleted if(pclient!=NULL){ //if blocking, NULL means accept ERROR cout<<"Server Accept connect socket-------------------------------"<<endl; MutexClient.Lock(); clientDeque.push_back(pclient); MutexClient.Unlock(); }else { cout<<"test: Blocking Socket Accept error! now sleep(100)"<<endl; MThread::Sleep(100); } } server.Close(); return 0; }
void NFSClient::RefreshTask::Invoke() { NFSClient* pClient = (NFSClient*)GetData(); if (pClient == NULL) { return; } NFS_HEAD head; head.m_nMsgCode = CODE_TEST; char szBuf[4096+512] = {0};//4096表示buffer区,512表示包头 if (pClient->m_pServerModule->m_pServer->m_nAllfileInfoLen > 0) { pClient->SendCmd(CODE_REFRESH_BEGIN); } else { pClient->SendCmd(CODE_REFRESH_FAILED); return; } head.m_iType = NFS_HEAD_DATA; head.m_nIndex = 0; head.m_nMsgCode = CODE_REFRESH_DOING; int iLeft = (pClient->m_pServerModule->m_pServer->m_nAllfileInfoLen)%MAX_DATA_LEN; int iCout = (pClient->m_pServerModule->m_pServer->m_nAllfileInfoLen)/MAX_DATA_LEN; head.m_nCount = iCout + 1; cout<<"刷新的传输次数:"<<head.m_nCount<<endl; MSocket* pClientDataSocket = pClient->m_pServerModule->m_pServer->m_DataSocket.Accept(); for (int i = 0; i < iCout; ++i) { head.m_nLength = MAX_DATA_LEN; head.m_nIndex = i; head.SetBuffer(pClient->m_pServerModule->m_pServer->m_pszAllFileInfo + MAX_DATA_LEN*i,MAX_DATA_LEN); unsigned long len = head.GetStream(szBuf); unsigned int nResult = 0; pClientDataSocket->Send(szBuf,len); } head.m_nLength = iLeft; head.m_nIndex = iCout; head.SetBuffer(pClient->m_pServerModule->m_pServer->m_pszAllFileInfo + MAX_DATA_LEN*iCout,iLeft); unsigned long len = head.GetStream(szBuf); pClientDataSocket->Send(szBuf,len); head.m_nLength = 0; head.m_nIndex = 0; head.m_nMsgCode = CODE_REFRESH_SUCCESS_DONE; len = head.GetStream(szBuf); pClientDataSocket->Send(szBuf,len); pClientDataSocket->Close(); pClient->SendCmd(CODE_REFRESH_FINISH); }