해당 클라이언트와 서버에서 익셉션이 발생할지 알았는데...
그렇지 않더군요...
SHIFT+CTRL+DEL을 눌러서 강제로 종료할때 어떤 익셉션도 받지 못하나요?
참고로 클라이언트와 서버 연결동안 클라이언트를 강제로 종료하니깐..
서버 쪽에서 익셉션이 나오긴 하는데...
IdStck에
procedure TIdStack.RaiseSocketError(const AErr: integer);
raise EIdSocketError.CreateError(AErr, WSTranslateSocketErrorMsg(AErr));===>발생
이 부분에서 발생합니다...
어떻게 처리하는지 궁금합니다...
맨날 질문만 올려서 죄송해요~
except
on E : Exception do
begin
if Pos('Socket Error # 10054', E.Message) > 0 then
begin
//Client := Pointer(AThread.Data);
//Clients.Delete(Client.ListInx);
//Client.Free;
//해당 서버정보도 List에서 없애준다.
PeerIP := TIdIOHandlerSocket(AThread.Connection.IOHandler).Binding.PeerIP; {수정본}
AThread.Connection.DisconnectSocket;
AThread.Stop;
//AThread.Data := nil;
DisconnectServer( PeerIP );
DrawListServerInfo;
AddLogError_Memo('Chatting Server Socket Force Close : ' + PeerIP);
end
else
begin
AddLogError_Memo('IdServerPeerExecute Function Process Messsage : ' + Cmd);
AddLogError_Memo('IdServerPeerExecute Function Except Messsage : ' + E.Message);
end;
end;
발생하는 군요....그래서 서버쪽에서 처리가 가능하군요
그런데 서버소켓이 강제로 종료될 경우...인디클라이언트에서도 익셉션이 발생하는거 같긴한데...
어느 쪽에에서 그 이벤트를 잡아야하는지 궁금하군요...
물론 소켓에 쓸때 에러가 나서 처리가 가능하긴 하지만....
서버소켓이 종료되는 순간을 알아낼 수는 없을까요???