У меня есть приложение Delphi 6, которое использует компоненты Indy 9 для поддержания постоянного IdTCPConnection с внешним устройством. Иногда я хочу разорвать соединение, а затем снова подключиться к устройству. Я обнаружил, что когда я это делаю, Indy выдает до 3 отдельных исключений. Это сделало разработку чистой стратегии повторного подключения несколько запутанной, поскольку компонент Indy находится в фоновом потоке, и я не хочу прерывать цикл выполнения потока () .
Каков хороший или чистый способ поглотить 3 исключения, прежде чем я попытаюсь снова подключиться? Я видел 3 исключения: EIdClosedSocket, EIdConnClosedGracefully, EIdSocketError (с LastError = WSAECONNABORTED). Я хочу дождаться распространения всех исключений, связанных с закрытием сокета, прежде чем пытаться повторно подключиться, но я не уверен, как структурировать цикл кода для этого.
EIdClosedSocket
ИЛИEIdConnClosedGracefully
ИЛИEIdSocketError
, но не все три сразу. И самDisconnect()
вообще не должен вызывать никаких исключений, но если это так, попробуйте вместо этого использоватьDisconnectSocket()
. 14.06.2012