IdTCPServer1->OnDisconnect = NULL;
을 추가해야 Active=false;가 동작을 제대로 하네요.
인터넷 링크 입니다.
https://stackoverflow.com/questions/54467521/tidtcpserver-hangs-when-setting-active-false
newhuni 님이 쓰신 글 :
: 안녕하세요.
: 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;
: }
:
|