BOOL CClientSocket::SendData() { BOOL isOK = TRUE; while(TRUE) { smart_simple_ptr<CBufferPtr> bufferPtr = GetSendBuffer(); if(bufferPtr.is_valid()) { CBufferPtr& sndData = *bufferPtr; isOK = DoSendData(sndData); if(isOK) { if(sndData.Size() > 0) { CCriSecLock locallock(m_scBuffer); m_sndBuffers->push_front(bufferPtr.release()); break; } } else break; } else break; } return isOK; }
BOOL CTcpClient::SendData() { BOOL isOK = TRUE; while(TRUE) { TItemPtr itPtr(m_itPool, GetSendBuffer()); if(itPtr.IsValid()) { ASSERT(!itPtr->IsEmpty()); isOK = DoSendData(itPtr); if(isOK) { if(!itPtr->IsEmpty()) { CCriSecLock locallock(m_scSend); m_lsSend.PushFront(itPtr.Detach()); break;; } } else break; } else break; } return isOK; }
BOOL CTcpClient::SendData() { if(m_lsSend.IsEmpty()) return TRUE; CCriSecLock locallock(m_csSend); if(m_lsSend.IsEmpty()) return TRUE; BOOL isOK = TRUE; while(TRUE) { TItemPtr itPtr(m_itPool, m_lsSend.PopFront()); if(!itPtr.IsValid()) break; ASSERT(!itPtr->IsEmpty()); isOK = DoSendData(itPtr); if(!isOK) break; if(!itPtr->IsEmpty()) { m_lsSend.PushFront(itPtr.Detach()); break; } } return isOK; }