|
** 이렇게 해보시죠
클라이언트에서 패킷을 수신하는 아랫부분에 catch(...) 부분에서
만약 클라이언트로부터 수신되는 메시지에 오류 발생시(클라이언트가 갑자기 종료했을경우)
현재 서버에 남아있는 thread 를 없애면 될거 같은데..
맞는지 모르겠군요
저도 그러한 상황이 발생되어서 서버의 Disconnet 함수의 코딩 부분을 아래 에외오류에 처리 해주니깐.. 랜선이 빠지거나 갑자기 종료하거나 등등
알아서 죽여주네요..
//---------------------------------------------------------------------------
void __fastcall TfrmMsnServer::IdTCPServerExecute(TIdPeerThread *AThread)
{
try
{
AnsiString asReceive;
asReceive = AThread->Connection->ReadLn("", 5000);
....
.... //처리 하시고
}
}
catch(...)
{
TClientInfor* pClientInfor;
pClientInfor = (TClientInfor*) (AThread->Data);
m_pClientList->Delete(m_pClientList->IndexOf(pClientInfor));
delete pClientInfor;
AThread->Data = NULL;
}
}
|