Beispiel #1
0
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;
}