BOOL CTcpServer::ContinueReceive(TSocketObj* pSocketObj, TBufferObj* pBufferObj, EnHandleResult& hr) { int rs = NO_ERROR; for(int i = 0; i < MAX_IOCP_CONTINUE_RECEIVE || MAX_IOCP_CONTINUE_RECEIVE < 0; i++) { if(hr != HR_OK && hr != HR_IGNORE) break; if(pBufferObj->buff.len != m_dwSocketBufferSize) break; pBufferObj->buff.len = m_dwSocketBufferSize; rs =::NoBlockReceiveNotCheck(pBufferObj); if(rs != NO_ERROR) break; hr = TriggerFireReceive(pSocketObj, pBufferObj); } if(rs != NO_ERROR && rs != WSAEWOULDBLOCK) { if(rs == WSAEDISCON) AddFreeSocketObj(pSocketObj, SCF_CLOSE); else CheckError(pSocketObj, SO_RECEIVE, rs); AddFreeBufferObj(pBufferObj); return FALSE; } return TRUE; }
void CTcpServer::HandleReceive(CONNID dwConnID, TSocketObj* pSocketObj, TBufferObj* pBufferObj) { if(m_bMarkSilence) pSocketObj->activeTime = ::TimeGetTime(); EnHandleResult hr = TriggerFireReceive(pSocketObj, pBufferObj); if(hr == HR_OK || hr == HR_IGNORE) { if(ContinueReceive(pSocketObj, pBufferObj, hr)) { { CSpinLock locallock(pSocketObj->sgPause); pSocketObj->recving = FALSE; } DoReceive(pSocketObj, pBufferObj); } } if(hr == HR_CLOSED) { AddFreeBufferObj(pBufferObj); } else if(hr == HR_ERROR) { TRACE("<S-CNNID: %Iu> OnReceive() event return 'HR_ERROR', connection will be closed !\n", dwConnID); AddFreeSocketObj(pSocketObj, SCF_ERROR, SO_RECEIVE, ENSURE_ERROR_CANCELLED); AddFreeBufferObj(pBufferObj); } }
void CTcpServer::HandleReceive(CONNID dwConnID, TSocketObj* pSocketObj, TBufferObj* pBufferObj) { if(m_bMarkSilence) pSocketObj->activeTime = ::TimeGetTime(); EnHandleResult hr = TriggerFireReceive(pSocketObj, pBufferObj); if(hr == HR_OK || hr == HR_IGNORE) DoReceive(dwConnID, pSocketObj, pBufferObj); else if(hr == HR_CLOSED) { AddFreeBufferObj(pBufferObj); } else { AddFreeSocketObj(pSocketObj, SCF_ERROR, SO_RECEIVE, ERROR_CANCELLED); AddFreeBufferObj(pBufferObj); } }
void CTcpAgent::HandleReceive(CONNID dwConnID, TSocketObj* pSocketObj, TBufferObj* pBufferObj) { if(m_bMarkSilence) pSocketObj->activeTime = ::TimeGetTime(); EnHandleResult hr = TriggerFireReceive(pSocketObj, pBufferObj); if(hr == HR_OK || hr == HR_IGNORE) DoReceive(dwConnID, pSocketObj, pBufferObj); else if(hr == HR_CLOSED) { AddFreeBufferObj(pBufferObj); } else { TRACE("<A-CNNID: %Iu> OnReceive() event return 'HR_ERROR', connection will be closed !\n", dwConnID); AddFreeSocketObj(pSocketObj, SCF_ERROR, SO_RECEIVE, ERROR_CANCELLED); AddFreeBufferObj(pBufferObj); } }