indy IdTCP の Connected関数は例外を生成する

ホストから接続がリセットされた場合は Connected関数を実行する度に
例外「Socket Error # 10054 ピアにより接続がリセットされました」が発生します。
このためSocket Error # 10054発生時にアプリ終了手続き(FormCloseQuery内等)で例外処理無しで
if IdTCPClient1.Connected then IdTCPClient1.Disconnect;
を実行した場合は例外発生でDisconnectが実行されず、アプリケーションが終了できなくなります。
よって例外処理で Disconnect手続きを実行し、以後の例外発生を阻止する必要が有ります。

例1) 例外処理で Disconnectを実行して例外の再発生を防止する

  try
    if IdTCPClient1.Connected then ...
  except
    IdTCPClient1.Disconnect;
    ...
  end;

例2) エラーメッセージを出力する場合の例

  try
    if IdTCPClient1.Connected then ...   
  except
    on E: Exception do begin 
            IdTCPClient1.Disconnect;
            ShowMessage(E.Message);
            ...
          end;
  end;
Socket Error # 1005 を発生させる手順(TCP host を Delphi IDE上 で実行する)
  1. TCP host: IDE上でHostアプリを実行してTCPホストをオープンする
  3. TCP host: メニューバーから「実行」→「プログラムの停止」を行う
  2. TCP Client: TCPクライアントをオープンする
  3. TCP host: メニューバーから「実行」→「プログラムの終了」を行う
  4. TCP Client: Connected 関数を実行すると Socket Error # 1005 例外が発生する

Home