Erro Indy 10038 “Operação do soquete no não soquete” após 61 segundos de inatividade
Quero baixar alguns arquivos grandes (GB) de um servidor FTP. O download do primeiro arquivo sempre funciona. Então, ao tentar obter o segundo arquivo, recebo:
"Erro no soquete # 10038. Operação do soquete no não soquete."
O erro está em 'Get'. Depois de 'Get', vejo estas mensagens (via evento de status FTP):
Starting FTP transfer
Disconnecting.
Disconnected.
O código é assim:
{pseudo-code}
for 1 to AllFiles do
begin
if Connect2FTP then
begin
FTP.Get(Name, GzFile, TRUE, FALSE); <--- Socket operation on non-socket" error (I also get EIdConnClosedGracefully 'Connection Closed Gracefully' in IDE, F9 will resume execution without problems, but this is OK)
Unpack(GzFile); <--- this takes more than 60 seconds
end;
end;
if FTP.Connected
then FTP.Disconnect;
-
function Connect2FTP(FTP: TIdFTP; RemoteFolder: string; Log: TRichLog): Boolean;
begin
Result:= FTP.Connected;
if NOT Result then
begin { We are already connected }
FTP.Host := MyFTP;
FTP.Username:= usr;
FTP.Password:= psw;
TRY
FTP.Connect;
EXCEPT
on E: Exception DO
Result:= FTP.Connected;
if Result then FTP.ChangeDir(RemoteFolder);
end;
end;
Código completo aqui:http://pastebin.com/RScj86R8 (PAS) ou aquihttps://ufile.io/26b54 (FECHO ECLAIR)
Acho que o problema aparece depois de chamar 'Unpack', que leva alguns minutos.
ATUALIZAÇÃO: CONFIRMADA: O problema aparece após chamar 'Descompactar'. Eu removi a ligação e está tudo bem. Pausar (suspensão ou interrupção) o programa entre downloads por um tempo (acho que por mais de 60 segundos) criará o mesmo problema.