안녕하세요.
TIdTCPServer, TIdTCPClient 컴포넌트를 이용하여 프로그램을 작성하고 있습니다.
아래는 Server 프로그램에서 프로그램 종료시 수행하는 동작입니다.
연결된 클라이언트와 연결을 해제하고 프로그램을 종료합니다.
그런데 가끔 통신중인 서버 프로그램을 종료해 버리면 "응답없음"현상이 발생합니다.
IdTCPServer1->Active = false; 이 부분에서 발생하는 것으로 보입니다.
try{}catch{}문을 사용해도 사라지지 않네요.
어느 부분을 확인해야 할지... 조언 부탁드립니다.
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
TList *list;
TIdContext *AContext;
list = IdTCPServer1->Contexts->LockList();
try
{
for(int i=0;i<list->Count;i++)
{
AContext = reinterpret_cast<TIdContext *>(list->Items[i]);
AContext->Connection->Disconnect();
}
}
__finally
{
IdTCPServer1->Contexts->UnlockList();
}
IdTCPServer1->Active = false;
}
|