virtual EnHandleResult OnPrepareListen(IUdpServer* pSender, SOCKET soListen) override { TCHAR szAddress[50]; int iAddressLen = sizeof(szAddress) / sizeof(TCHAR); USHORT usPort; pSender->GetListenAddress(szAddress, iAddressLen, usPort); ::PostOnPrepareListen(szAddress, usPort); VERIFY_IS_NO_ERROR(::SSO_RecvBuffSize(soListen, 8 * 1024 * 1024)); return HR_OK; }
BOOL CHPThreadPool::CreateWorkerThreads(DWORD dwThreadCount) { unique_ptr<pthread_attr_t> pThreadAttr; if(m_dwStackSize != 0) { pThreadAttr = make_unique<pthread_attr_t>(); VERIFY_IS_NO_ERROR(pthread_attr_init(pThreadAttr.get())); int rs = pthread_attr_setstacksize(pThreadAttr.get(), m_dwStackSize); if(!IS_NO_ERROR(rs)) { pthread_attr_destroy(pThreadAttr.get()); ::SetLastError(rs); return FALSE; } } BOOL isOK = TRUE; for(DWORD i = 0; i < dwThreadCount; i++) { THR_ID dwThreadID; int rs = pthread_create(&dwThreadID, pThreadAttr.get(), ThreadProc, (PVOID)this); if(!IS_NO_ERROR(rs)) { ::SetLastError(rs); isOK = FALSE; break; } m_stThreads.emplace(dwThreadID); ++m_dwThreadCount; } if(pThreadAttr != nullptr) pthread_attr_destroy(pThreadAttr.get()); return isOK; }