EnHandleResult CTcpServer::TriggerFireSend(TSocketObj* pSocketObj, TBufferObj* pBufferObj) { EnHandleResult rs = (EnHandleResult)HR_CLOSED; if(m_enOnSendSyncPolicy == OSSP_NONE) rs = TRIGGER(FireSend(pSocketObj, (BYTE*)pBufferObj->buff.buf, pBufferObj->buff.len)); else { ASSERT(m_enOnSendSyncPolicy >= OSSP_CLOSE && m_enOnSendSyncPolicy <= OSSP_RECEIVE); if(TSocketObj::IsValid(pSocketObj)) { CCriSecLock locallock(m_enOnSendSyncPolicy == OSSP_CLOSE ? pSocketObj->csSend : pSocketObj->csRecv); if(TSocketObj::IsValid(pSocketObj)) { rs = TRIGGER(FireSend(pSocketObj, (BYTE*)pBufferObj->buff.buf, pBufferObj->buff.len)); } } } if(rs == HR_ERROR) { TRACE("<S-CNNID: %Iu> OnSend() event should not return 'HR_ERROR' !!\n", pSocketObj->connID); ASSERT(FALSE); } if(pBufferObj->ReleaseSendCounter() == 0) AddFreeBufferObj(pBufferObj); return rs; }
BOOL CTcpClient::DoSendData(TItem* pItem) { while(!pItem->IsEmpty()) { int rc = (int)write(m_soClient, (char*)pItem->Ptr(), pItem->Size()); if(rc > 0) { if(TRIGGER(FireSend(pItem->Ptr(), rc)) == HR_ERROR) { TRACE("<C-CNNID: %zu> OnSend() event should not return 'HR_ERROR' !!", m_dwConnID); ASSERT(FALSE); } pItem->Reduce(rc); } else if(rc == SOCKET_ERROR) { int code = ::WSAGetLastError(); if(code == ERROR_WOULDBLOCK) break; else { m_ccContext.Reset(TRUE, SO_SEND, code); return FALSE; } } else ASSERT(FALSE); } return TRUE; }
BOOL CUdpClient::SendData() { while(TRUE) { TItemPtr itPtr(m_itPool, GetSendBuffer()); if(itPtr.IsValid()) { ASSERT(!itPtr->IsEmpty()); int rc = 0; { CCriSecLock locallock(m_csSend); rc = send(m_soClient, (char*)itPtr->Ptr(), itPtr->Size(), 0); if(rc > 0) m_iPending -= rc; } if(rc > 0) { ASSERT(rc == itPtr->Size()); if(FireSend(this, itPtr->Ptr(), rc) == HR_ERROR) { TRACE("<C-CNNID: %Iu> OnSend() event should not return 'HR_ERROR' !!\n", m_dwConnID); ASSERT(FALSE); } } else if(rc == SOCKET_ERROR) { int iCode = ::WSAGetLastError(); if(iCode == WSAEWOULDBLOCK) { CCriSecLock locallock(m_csSend); m_lsSend.PushFront(itPtr.Detach()); break; } else { SetLastError(SE_NETWORK, __FUNCTION__, iCode); FireError(this, SO_SEND, iCode); return FALSE; } } else ASSERT(FALSE); } else break; } return TRUE; }
void CTcpAgent::TriggerFireSend(CONNID dwConnID, TBufferObj* pBufferObj) { if(FireSend(dwConnID, (BYTE*)pBufferObj->buff.buf, pBufferObj->buff.len) == HR_ERROR) { TRACE("<A-CNNID: %Iu> OnSend() event should not return 'HR_ERROR' !!\n", dwConnID); ASSERT(FALSE); } AddFreeBufferObj(pBufferObj); }
void CTcpServer::HandleSend(CONNID dwConnID, TSocketObj* pSocketObj, TBufferObj* pBufferObj) { if(FireSend(dwConnID, (BYTE*)pBufferObj->buff.buf, pBufferObj->buff.len) == ISocketListener::HR_ERROR) { TRACE("<S-CNNID: %Iu> OnSend() event should not return 'HR_ERROR' !!\n", dwConnID); ASSERT(FALSE); } AddFreeBufferObj(pBufferObj); }
BOOL CUdpCast::SendData() { while(TRUE) { TItemPtr itPtr(m_itPool, GetSendBuffer()); if(itPtr.IsValid()) { ASSERT(!itPtr->IsEmpty()); int rc = 0; { CCriSecLock locallock(m_csSend); rc = sendto(m_soClient, (char*)itPtr->Ptr(), itPtr->Size(), 0, (sockaddr*)&m_castAddr, sizeof(SOCKADDR_IN)); if(rc > 0) m_iPending -= rc; } if(rc > 0) { ASSERT(rc == itPtr->Size()); if(FireSend(itPtr->Ptr(), rc) == HR_ERROR) { TRACE("<C-CNNID: %Iu> OnSend() event should not return 'HR_ERROR' !!\n", m_dwConnID); ASSERT(FALSE); } } else if(rc == SOCKET_ERROR) { int iCode = ::WSAGetLastError(); if(iCode == WSAEWOULDBLOCK) { CCriSecLock locallock(m_csSend); m_lsSend.PushFront(itPtr.Detach()); break; } else { m_ccContext.Reset(TRUE, SO_SEND, iCode); return FALSE; } } else ASSERT(FALSE); } else break; } return TRUE; }
EnHandleResult CTcpServer::TriggerFireSend(TSocketObj* pSocketObj, TBufferObj* pBufferObj) { EnHandleResult rs = FireSend(pSocketObj, (BYTE*)pBufferObj->buff.buf, pBufferObj->buff.len); if(rs == HR_ERROR) { TRACE("<S-CNNID: %Iu> OnSend() event should not return 'HR_ERROR' !!\n", pSocketObj->connID); ASSERT(FALSE); } AddFreeBufferObj(pBufferObj); return rs; }
void CUdpServer::HandleSend(CONNID dwConnID, TUdpBufferObj* pBufferObj) { if(FireSend(dwConnID, (BYTE*)pBufferObj->buff.buf, pBufferObj->buff.len) == HR_ERROR) { TRACE1("<S-CNNID: %Iu> OnSend() event should not return 'HR_ERROR' !!\n", dwConnID); ASSERT(FALSE); } AddFreeBufferObj(pBufferObj); TUdpSocketObj* pSocketObj = FindSocketObj(dwConnID); if(TUdpSocketObj::IsValid(pSocketObj)) { long sndCount = ::InterlockedDecrement(&pSocketObj->sndCount); if(sndCount == 0) DoSend(pSocketObj); } }
BOOL CTcpClient::DoSendData(TItem* pItem) { while(!pItem->IsEmpty()) { int rc = 0; { CCriSecLock locallock(m_csSend); rc = send(m_soClient, (char*)pItem->Ptr(), min(pItem->Size(), (int)m_dwSocketBufferSize), 0); if(rc > 0) m_iPending -= rc; } if(rc > 0) { if(FireSend(this, pItem->Ptr(), rc) == HR_ERROR) { TRACE("<C-CNNID: %Iu> OnSend() event should not return 'HR_ERROR' !!\n", m_dwConnID); ASSERT(FALSE); } pItem->Reduce(rc); } else if(rc == SOCKET_ERROR) { int code = ::WSAGetLastError(); if(code == WSAEWOULDBLOCK) break; else { SetLastError(SE_NETWORK, __FUNCTION__, code); FireError(this, SO_SEND, code); return FALSE; } } else ASSERT(FALSE); } return TRUE; }
BOOL CClientSocket::DoSendData(CBufferPtr& sndData) { while(sndData.Size() > 0) { int rc = send(m_soClient, (char*)(BYTE*)sndData, min((int)sndData.Size(), (int)m_dwSocketBufferSize), 0); if(rc > 0) { if(FireSend(m_dwConnID, sndData, rc) == ISocketListener::HR_ERROR) { TRACE1("<CNNID: %Iu> OnSend() event should not return 'HR_ERROR' !!\n", m_dwConnID); ASSERT(FALSE); } int left = (int)sndData.Size() - rc; memcpy((BYTE*)sndData, (BYTE*)sndData + rc, left); sndData.Realloc(left); } else if(rc == SOCKET_ERROR) { int code = ::WSAGetLastError(); if(code == WSAEWOULDBLOCK) break; else { SetLastError(ISC_NETWORK_ERROR, _T(__FUNCTION__), code); FireError(m_dwConnID, SO_SEND, code); return FALSE; } } else ASSERT(FALSE); } return TRUE; }
void CIocpServer::HandleSend(TSocketObj* pSocketObj, TBufferObj* pBufferObj) { FireSend(pSocketObj->connID, (BYTE*)pBufferObj->buff.buf, pBufferObj->buff.len); AddFreeBufferObj(pBufferObj); }