fix: IOCPClient clear buffer when disconnect
This commit is contained in:
@@ -265,8 +265,7 @@ BOOL IOCPClient::ConnectServer(const char* szServerIP, unsigned short uPort)
|
|||||||
}
|
}
|
||||||
if (m_hWorkThread == NULL){
|
if (m_hWorkThread == NULL){
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
m_hWorkThread = (HANDLE)CreateThread(NULL, 0,
|
m_hWorkThread = (HANDLE)CreateThread(NULL, 0, WorkThreadProc,(LPVOID)this, 0, NULL);
|
||||||
WorkThreadProc,(LPVOID)this, 0, NULL);
|
|
||||||
m_bWorkThread = m_hWorkThread ? S_RUN : S_STOP;
|
m_bWorkThread = m_hWorkThread ? S_RUN : S_STOP;
|
||||||
#else
|
#else
|
||||||
pthread_t id = 0;
|
pthread_t id = 0;
|
||||||
@@ -284,6 +283,7 @@ DWORD WINAPI IOCPClient::WorkThreadProc(LPVOID lParam)
|
|||||||
char* szBuffer = new char[MAX_RECV_BUFFER];
|
char* szBuffer = new char[MAX_RECV_BUFFER];
|
||||||
fd_set fd;
|
fd_set fd;
|
||||||
struct timeval tm = { 2, 0 };
|
struct timeval tm = { 2, 0 };
|
||||||
|
This->m_CompressedBuffer.ClearBuffer();
|
||||||
|
|
||||||
while (This->IsRunning()) // û<><C3BB><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>һֱ<D2BB><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>
|
while (This->IsRunning()) // û<><C3BB><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>һֱ<D2BB><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>
|
||||||
{
|
{
|
||||||
@@ -306,22 +306,23 @@ DWORD WINAPI IOCPClient::WorkThreadProc(LPVOID lParam)
|
|||||||
{
|
{
|
||||||
Mprintf("[select] return %d, GetLastError= %d. \n", iRet, WSAGetLastError());
|
Mprintf("[select] return %d, GetLastError= %d. \n", iRet, WSAGetLastError());
|
||||||
This->Disconnect(); //<2F><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
This->Disconnect(); //<2F><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
This->m_CompressedBuffer.ClearBuffer();
|
||||||
if(This->m_exit_while_disconnect)
|
if(This->m_exit_while_disconnect)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (iRet > 0)
|
else if (iRet > 0)
|
||||||
{
|
{
|
||||||
memset(szBuffer, 0, MAX_RECV_BUFFER);
|
int iReceivedLength = recv(This->m_sClientSocket, szBuffer, MAX_RECV_BUFFER-1, 0);
|
||||||
int iReceivedLength = recv(This->m_sClientSocket,
|
|
||||||
szBuffer, MAX_RECV_BUFFER, 0); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض˷<D8B6><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
if (iReceivedLength <= 0)
|
if (iReceivedLength <= 0)
|
||||||
{
|
{
|
||||||
int a = WSAGetLastError();
|
int a = WSAGetLastError();
|
||||||
This->Disconnect(); //<2F><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
This->Disconnect(); //<2F><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
This->m_CompressedBuffer.ClearBuffer();
|
||||||
if(This->m_exit_while_disconnect)
|
if(This->m_exit_while_disconnect)
|
||||||
break;
|
break;
|
||||||
}else{
|
}else{
|
||||||
|
szBuffer[iReceivedLength] = 0;
|
||||||
//<2F><>ȷ<EFBFBD><C8B7><EFBFBD>վ͵<D5BE><CDB5><EFBFBD>OnRead<61><64><EFBFBD><EFBFBD>,ת<><D7AA>OnRead
|
//<2F><>ȷ<EFBFBD><C8B7><EFBFBD>վ͵<D5BE><CDB5><EFBFBD>OnRead<61><64><EFBFBD><EFBFBD>,ת<><D7AA>OnRead
|
||||||
This->OnServerReceiving(szBuffer, iReceivedLength);
|
This->OnServerReceiving(szBuffer, iReceivedLength);
|
||||||
}
|
}
|
||||||
@@ -513,6 +514,9 @@ BOOL IOCPClient::SendWithSplit(const char* szBuffer, ULONG ulLength, ULONG ulSpl
|
|||||||
|
|
||||||
VOID IOCPClient::Disconnect()
|
VOID IOCPClient::Disconnect()
|
||||||
{
|
{
|
||||||
|
if (m_sClientSocket == INVALID_SOCKET)
|
||||||
|
return;
|
||||||
|
|
||||||
Mprintf("<EFBFBD>Ͽ<EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n");
|
Mprintf("<EFBFBD>Ͽ<EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n");
|
||||||
|
|
||||||
CancelIo((HANDLE)m_sClientSocket);
|
CancelIo((HANDLE)m_sClientSocket);
|
||||||
|
|||||||
Reference in New Issue
Block a user