BOOL CTcpAgent::DoSendPackets(TSocketObj* pSocketObj, const WSABUF pBuffers[], int iCount) { ASSERT(pSocketObj && pBuffers && iCount > 0); int result = NO_ERROR; if(pBuffers && iCount > 0) { CCriSecLock locallock(pSocketObj->csSend); if(TSocketObj::IsValid(pSocketObj)) result = SendInternal(pSocketObj, pBuffers, iCount); else result = ERROR_OBJECT_NOT_FOUND; } else result = ERROR_INVALID_PARAMETER; if(result != NO_ERROR) { if(m_enSendPolicy == SP_DIRECT && TSocketObj::IsValid(pSocketObj)) CheckError(pSocketObj, SO_SEND, result); ::SetLastError(result); } return (result == NO_ERROR); }
BOOL CTcpClient::DoSendPackets(const WSABUF pBuffers[], int iCount) { ASSERT(pBuffers && iCount > 0); int result = NO_ERROR; if(pBuffers && iCount > 0) { if(IsConnected()) { CCriSecLock locallock(m_csSend); if(IsConnected()) result = SendInternal(pBuffers, iCount); else result = ERROR_INVALID_STATE; } else result = ERROR_INVALID_STATE; } else result = ERROR_INVALID_PARAMETER; if(result != NO_ERROR) ::SetLastError(result); return (result == NO_ERROR); }
BOOL CUdpClient::SendPackets(const WSABUF pBuffers[], int iCount) { int result = NO_ERROR; EnSocketError enCode = SE_OK; ASSERT(pBuffers && iCount > 0); if(pBuffers && iCount > 0) { int iLength = 0; int iMaxLen = (int)m_dwMaxDatagramSize; TItemPtr itPtr(m_itPool, m_itPool.PickFreeItem()); for(int i = 0; i < iCount; i++) { int iBufLen = pBuffers[i].len; if(iBufLen > 0) { BYTE* pBuffer = (BYTE*)pBuffers[i].buf; ASSERT(pBuffer); iLength += iBufLen; if(iLength <= iMaxLen) itPtr->Cat(pBuffer, iBufLen); else break; } } if(iLength > 0 && iLength <= iMaxLen) result = SendInternal(itPtr->Ptr(), iLength, enCode); else { result = ERROR_INCORRECT_SIZE; enCode = SE_INVALID_PARAM; } } else { result = ERROR_INVALID_PARAMETER; enCode = SE_INVALID_PARAM; } if(result != NO_ERROR) SetLastError(enCode, __FUNCTION__, result); return (result == NO_ERROR); }
bool ProactorService::SendRequest(BasePacket* pPacket) { IPacketProtocol* pProtocol = GetPacketProtocol(); if (NULL == pProtocol) return false; char* pBuffer = NULL; int bufferSize = 0; if (false == pProtocol->Encode(pPacket, &pBuffer, bufferSize)) return false; SendInternal(pBuffer, bufferSize); return true; }
BOOL CUdpCast::Send(const BYTE* pBuffer, int iLength, int iOffset) { int result = NO_ERROR; ASSERT(pBuffer && iLength > 0 && iLength <= (int)m_dwMaxDatagramSize); if(pBuffer && iLength > 0 && iLength <= (int)m_dwMaxDatagramSize) { if(iOffset != 0) pBuffer += iOffset; result = SendInternal(pBuffer, iLength); } else result = ERROR_INVALID_PARAMETER; if(result != NO_ERROR) ::SetLastError(result); return (result == NO_ERROR); }
BOOL CTcpClient::SendPackets(const WSABUF pBuffers[], int iCount) { int result = NO_ERROR; EnSocketError enCode = SE_OK; ASSERT(pBuffers && iCount > 0); if(pBuffers && iCount > 0) { if(HasStarted()) { CCriSecLock locallock(m_csSend); if(HasStarted()) result = SendInternal(pBuffers, iCount, enCode); else { result = ERROR_INVALID_STATE; enCode = SE_ILLEGAL_STATE; } } else { result = ERROR_INVALID_STATE; enCode = SE_ILLEGAL_STATE; } } else { result = ERROR_INVALID_PARAMETER; enCode = SE_INVALID_PARAM; } if(result != NO_ERROR) SetLastError(enCode, __FUNCTION__, result); return (result == NO_ERROR); }
BOOL CUdpClient::Send(const BYTE* pBuffer, int iLength, int iOffset) { int result = NO_ERROR; EnSocketError enCode = SE_OK; ASSERT(pBuffer && iLength > 0 && iLength <= (int)m_dwMaxDatagramSize); if(pBuffer && iLength > 0 && iLength <= (int)m_dwMaxDatagramSize) { if(iOffset != 0) pBuffer += iOffset; result = SendInternal(pBuffer, iLength, enCode); } else { result = ERROR_INVALID_PARAMETER; enCode = SE_INVALID_PARAM; } if(result != NO_ERROR) SetLastError(enCode, __FUNCTION__, result); return (result == NO_ERROR); }
BOOL CTcpServer::SendPackets(CONNID dwConnID, const WSABUF pBuffers[], int iCount) { int result = NO_ERROR; TSocketObj* pSocketObj = nullptr; ASSERT(pBuffers && iCount > 0); if(pBuffers && iCount > 0) { pSocketObj = FindSocketObj(dwConnID); if(TSocketObj::IsValid(pSocketObj)) { CCriSecLock locallock(pSocketObj->csSend); if(TSocketObj::IsValid(pSocketObj)) result = SendInternal(pSocketObj, pBuffers, iCount); else result = ERROR_OBJECT_NOT_FOUND; } else result = ERROR_OBJECT_NOT_FOUND; } else result = ERROR_INVALID_PARAMETER; if(result != NO_ERROR) { if(m_enSendPolicy == SP_DIRECT && TSocketObj::IsValid(pSocketObj)) CheckError(pSocketObj, SO_SEND, result); ::SetLastError(result); } return (result == NO_ERROR); }
void ProactorService::handle_read_stream( const ACE_Asynch_Read_Stream::Result& result ) { ACE_Message_Block& block = result.message_block(); if (!result.success() || result.bytes_transferred() == 0) { block.release(); ReserveClose(); } else { if (false == ISession::OnReceive(block.rd_ptr(), (unsigned short)block.length(), m_sessionDesc)) { block.release(); ReserveClose(); return; } //20150322 memory leak fix SendInternal(block.rd_ptr(), (unsigned short)block.length()); block.release(); PostRecv(); } }