제가 보기에는 님의 질문에 대해 답변자분의 의견이 거의 정답에 근접한거 같습니다.
(에러루틴에 잡히거나 예외가 발생할 때,
해당부분에 처리루틴이 있다면 뭔가 될 수도 있겠지만요.
에러처리던 예외발생이던 결국은 프로그램이 직접 수행하는 것인데
해당 프로그램 자체가 이미 사망 혹은 기절했는데 비명소리가 들릴 리는 없겠지요.)
전혀 감이 안오신다면서 답변자의 의견을 거부하고
또다시, 충분히 될거라면서 다른 고수를 찾으시니까.
답변자분 정말 불쌍해 보입니다.
질의응답코너에서 답변자는 아무런 보답없이 아는 바를 전해 주는 고마운 분일텐데
답변을 했다는 것 때문에 "전혀 감이 없는 분"보다 더 모르는 'No 고수"가 되셨네요.
제 생각에는,
님이 생각하시는 대로 직접 하시고 난 후에,
( "예외처리나 에러처리를 통해서 충분히 메세지를 보낼수 있을것 같은데요...")
그 방법을 설명해 주시는게 많은 도움이 될 거 같습니다.
통신프로그램 개발자들 대부분(저도 당연히 포함)이 "님이 생각하시는 그 방법"을 배우고 싶어 할겁니다.
하나의 서버가, 다수의 클라이언트를 관리하는 식 말고
개별 클라이언트가 각자 알아서
자신이 접속된 서버가 죽었는지 살았는지
주기적으로 물어보는 식으로 접근해 보시는건 어떠신가요.
주기적으로 서버에 더미 패킷을 던져서(Ping테스트 비슷)
타임아웃될 동안 리플이 없으면 서버가 죽은 걸로 간주하는 식이죠.
(보통은 이럴 경우 재접속시도도 하죠.)
(증권 프로그램이나 모니터링 프로그램 등등 실시간 자료를 처리하는 프로그램들은 대부분 이런 기능 있음)
물론, 제3의 모듈을 둬서 특정 서버의 Live 모드를 주기적으로 체크하는 방식도 많이 쓰는 걸로 압니다.
(그래서, 이전 답변이 거의 정답일 듯 이라고 얘기했지요.)
Blocking모드로 서버 하나가 N개의 클라이언트에 모두 메시지를 던지려면 시간 꽤나 걸리구요.
당연하겠지만 서버가 클라이언트로 메시지를 던졌으면
클라이언트가 리플해 주는거 기다렸다가 하나하나 마무리하는 것도 추가로 필요하겠죠.
거기다가. 특정 클라이언트와 네트워크상에 장애가 발생하면
그거는 또다시 시간이 제법 걸린 후라야 캐치되겠죠.(디폴트값이 60초쯤 될겁니다.)
(서버는 특성상 어디선가는 Blocking모드로 복수개의 클라이언트를 관리하게 마련이죠...)
기본 가정이.. 서버가 죽어가는 중인데..
이런거 모두 할 여유가 있기는 어려울 겁니다.
참고로, 사용하시는 통신 컴포넌트라든지, 혹은 개발하시려는 시스템이 어떤 종류라든지
좀 더 구체적으로 설명하신 후에 질문하신다면
아마도 같은 길을 지나가신 분들이 친절히 가이드해주겠죠?
단, 강제 종료시라고 함은 프로그램에 문제 없이 코딩이 되어있다면, OnClose나 OnDestroy 이벤트에서 처리해 주시면 됩니다.
하지만 뻗어있는 상태를 강제 종료 시키는것이라면 불가능하지요..
만약 서버가 여러대라면, 다른 서버가 전달을 해 줄수는 있습니다. 단, 클라이언트들이 한번에 두 서버에 접속해 놓고 있어야 겠지요.
또 한가지는 클라이언트가 인터넷 공유기를 통하지 않고, 직접 공인IP를 통해 붙어있다면, 살아있는 서버가 그 IP목록에 접속하여 메세지를 보낼수도 있지만, 요새는 대부분이 방화벽 또는 공유기를 사용하기 때문에 현실적이지 못합니다.