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 件のコメント:
コメントを投稿