Indy 9 구성 요소를 사용하여 외부 장치와의 지속적인 IdTCPConnection을 유지 관리하는 Delphi 6 응용 프로그램이 있습니다. 어떤 때는 연결을 끊은 다음 장치에 다시 연결하려고합니다. Indy가 3 가지 예외를 버리는 것을 발견했을 때. Indy 구성 요소가 백그라운드 스레드에 있고 Execute() 루프 스레드를 중단하고 싶지 않기 때문에 다소 재밌는 재 연결 전략을 개발하게되었습니다.Indy가 소켓을 닫을 때 여러 예외를 throw합니다. 깨끗한 자동 재접속을 수행하는 방법?
다시 연결하기 전에 3 가지 예외를 흡수하는 좋은 방법이나 깨끗한 방법은 무엇입니까? 내가 본 3 가지 예외는 외양 순으로 EIdClosedSocket, EIdConnClosedGracefully, EIdSocketError (LastError = WSAECONNABORTED)입니다. 소켓의 닫는 것과 관련된 모든 예외가 재 연결을 시도하기 전에 전파 될 때까지 기다리고 싶지만 그렇게하기 위해 코드 루프를 구조화하는 방법을 모르겠습니다.
그러나 예외적으로 "새로 추가 된"연결을 실행 가능하게 유지하려면 Except 블록이 다시 실행됩니다. 그 맞습니까? 그게 문제가되지 않니? BTW, 기회가 생기면 AviSaveOptions()가 제시 한 코덱 목록 새로 고침과 관련하여 스택 오버플로에서 열어 본 다른 게시물에 대한 의견을 듣고 싶습니다. http://stackoverflow.com/questions/11013713/how- do-i-refresh-the-video-codecs-in-the-list-by-avisaveoptions –
아니요, 설명하는 내용이 정확하지 않습니다. 앞에서 말했듯이 단 하나의 예외만으로 코드가 손상 될 수 있습니다. 'EIdClosedSocket' 또는'EIdConnClosedGracefully' 또는'EIdSocketError'일지도 모르지만 한 번에 3 개가 될 수는 없습니다. 그리고'Disconnect()'자체는 전혀 예외를 발생시키지 않아야하지만, 그렇다면'DisconnectSocket()'을 대신 사용해보십시오. –
감사합니다. 어떤 이유로 든 하나 이상의 예외가 발생했다는 인상을 받았지만, 중단 점을 설정하고 둘 이상의 인스턴스에서 예외를보고 그 인스턴스를 모두 같은 인스턴스로 오인했기 때문일 수 있습니다 . –