TIdFTP.InternalGetメソッド内でInitDataChannelを呼び出してFDataChannel.IOHandlerのReadTimeoutにTransferTimeoutを設定しているのですが、DataChannelのReadTimeoutがデフォルトの-1のままになっているため、LPasvCl.Connectの呼び出しの内部でDataChannel.IOHandler.ReadTimeoutにFDataChannel.ReadTimeoutを設定して結果的にTransferTimeoutの値が無視されてしまう、というのが原因と思われます。
回避策としてはOnDataChannelCreateイベントでDataChannel.ReadTimeoutにもTransferTimeoutを設定してしまう、という方法が考えられます。
procedure TDataModule1.IdFTP1DataChannelCreate(ASender: TObject; ADataChannel: TIdTCPConnection); begin if (ASender <> nil) and (ASender is TIdFTP) then begin if (TIdFTP(ASender).Passive = True) and (ADataChannel <> nil) and (ADataChannel is TIdTCPClientCustom) then begin TIdTCPClientCustom(ADataChannel).ReadTimeout := TIdFTP(ASender).TransferTimeout; end; end; end;
0 件のコメント:
コメントを投稿