⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 overlapped_send.cpp

📁 墨香最新私服
💻 CPP
字号:
#include "overlapped_send.h"


COverlappedSend::COverlappedSend()
{
	memset(this,0,sizeof(COverlappedSend));
}
void COverlappedSend::Initialize(DWORD dwIndex,SOCKET s,HANDLE hEvent,DWORD dwSize)
{
	m_ovl.hEvent = hEvent;
	m_socket = s;
	m_dwMaxBufferSize = dwSize;
	m_pBuffer = new char[dwSize];
	m_dwIoType = IO_TYPE_WAIT;

	InitializeCriticalSection(&m_csSend);
}
BOOL COverlappedSend::Push(char* pMsg,DWORD dwLen)
{
	BOOL		bResult = FALSE;
	DWORD		dwTail;
	char*		p;
	
	dwTail = m_dwExistPacketSize + m_dwEntryPosition;
	// °¡¿ë ¹öÆÛ »çÀÌÁî°¡ º¸³»°íÀÚ ÇÏ´Â »çÀÌÁ´Ù ÀûÀ» °æ¿ì ¿£Æ®¸® Æ÷Áö¼Ç ÀçÁ¶Á¤.
	// ±×·¯°íµµ dwLenº¸´Ù ºÎÁ·Çϸé false¸®ÅÏ
	if (dwTail + dwLen + 2 > m_dwMaxBufferSize)
	{
		if (ResetBuffer() < dwLen + 2)
			goto lb_return;
	}
	p = m_pBuffer + m_dwEntryPosition + m_dwExistPacketSize;
	*(WORD*)p = (WORD)dwLen;
	memcpy(p + 2,pMsg,dwLen);

	m_dwExistPacketSize += (dwLen + 2);
	bResult = TRUE;

lb_return:

//	if( !bResult)
//		printf("Push Operation Error\n");
	return bResult;
}
BOOL COverlappedSend::SendBuffer()
{	
	BOOL		bResult = TRUE;
	WSABUF		wsabuf;
	wsabuf.buf = m_pBuffer + m_dwEntryPosition;
	wsabuf.len = m_dwExistPacketSize;
	m_dwIoType = IO_TYPE_WRITE;

	int result = WSASend(m_socket,&wsabuf,1,&m_dwTransferredBytes,NULL,&m_ovl,NULL);
	if (result != SOCKET_ERROR)
		goto lb_return;

	result = WSAGetLastError();
	if (result == ERROR_IO_PENDING)
		goto lb_return;

//	printf("Socket Error : %d\n", result);

	bResult = FALSE;

lb_return:
	return bResult;

}
void COverlappedSend::OnSend(DWORD dwTransferredBytes)
{
	m_dwEntryPosition += dwTransferredBytes;
	m_dwExistPacketSize -= dwTransferredBytes;
	m_dwIoType = IO_TYPE_WAIT;

	if (m_dwExistPacketSize)
		SendBuffer();
}

COverlappedSend::~COverlappedSend()
{
	DeleteCriticalSection(&m_csSend);
	if (m_pBuffer)
	{
		delete [] m_pBuffer;
		m_pBuffer = NULL;
	}
	closesocket(m_socket);
	m_socket = INVALID_SOCKET;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -