int XSocket::_iSendUnsentData() { int iRet; char * pTemp; while (m_pUnsentDataList[m_sHead] != 0) { iRet = _iSend_ForInternalUse(m_pUnsentDataList[m_sHead], m_iUnsentDataSize[m_sHead]); if (iRet == m_iUnsentDataSize[m_sHead]) { delete m_pUnsentDataList[m_sHead]; m_pUnsentDataList[m_sHead] = 0; m_iUnsentDataSize[m_sHead] = 0; m_sHead++; //if (m_sHead >= DEF_XSOCKBLOCKLIMIT) m_sHead = 0; if (m_sHead >= m_iBlockLimit) m_sHead = 0; } else { if (iRet < 0) return iRet; pTemp = new char[m_iUnsentDataSize[m_sHead] - iRet]; memcpy(pTemp, m_pUnsentDataList[m_sHead] + iRet, m_iUnsentDataSize[m_sHead] - iRet); delete m_pUnsentDataList[m_sHead]; m_pUnsentDataList[m_sHead] = pTemp; return DEF_XSOCKEVENT_UNSENTDATASENDBLOCK; } } return DEF_XSOCKEVENT_UNSENTDATASENDCOMPLETE; }
//============================================================================= int XSocket::_iSendUnsentData() { int iRet; char * pTemp; PutLogList("_iSendUnsentData"); while (m_pUnsentDataList[m_sHead] != NULL) { iRet = _iSend_ForInternalUse(m_pUnsentDataList[m_sHead], m_iUnsentDataSize[m_sHead]); if (iRet == m_iUnsentDataSize[m_sHead]) { SAFEDELETE(m_pUnsentDataList[m_sHead]); m_iUnsentDataSize[m_sHead] = 0; m_sHead++; if (m_sHead >= m_iBlockLimit) m_sHead = 0; } else { if (iRet < 0) return iRet; pTemp = new char[m_iUnsentDataSize[m_sHead] - iRet]; memcpy(pTemp, m_pUnsentDataList[m_sHead] + iRet, m_iUnsentDataSize[m_sHead] - iRet); delete m_pUnsentDataList[m_sHead]; m_pUnsentDataList[m_sHead] = pTemp; return XSOCKEVENT_UNSENTDATASENDBLOCK; } } return XSOCKEVENT_UNSENTDATASENDCOMPLETE; }