Indy error 10038 "Operación de socket en no socket" después de 61 segundos de inactividad
Quiero descargar algunos archivos grandes (GB) de un servidor FTP. La descarga del primer archivo siempre funciona. Luego, cuando intento obtener el segundo archivo, obtengo:
"Error de socket # 10038. Operación de socket en no socket".
El error está en 'Obtener'. Después de 'Obtener' veo estos mensajes (a través del evento de estado FTP):
Starting FTP transfer
Disconnecting.
Disconnected.
El código es así:
{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 aquí:http://pastebin.com/RScj86R8 (PAS) o aquíhttps://ufile.io/26b54 (CÓDIGO POSTAL)
Creo que el problema aparece después de llamar a 'Desempaquetar', que lleva unos minutos.
ACTUALIZACIÓN: CONFIRMADO: El problema aparece después de llamar 'Desempaquetar'. Eliminé la llamada y todo está bien. Pausar (suspender o interrumpir) el programa entre descargas durante un tiempo (creo que durante más de 60 segundos) creará el mismo problema.