Hallo,
Vorab: Ich verwende Indy9
ich bin grad auf der Suche nach einem Fehler im Projekt und bin auf die Funktion CheckForSocketError gestoßen:
Delphi-Quellcode:
function TIdStack.CheckForSocketError(const AResult: integer;
const AIgnore: array of integer): boolean;
var
i: integer;
begin
Result := false;
if AResult = Id_SOCKET_ERROR then begin
FLastError := WSGetLastError;
for i := Low(AIgnore) to High(AIgnore) do begin
if LastError = AIgnore[i] then begin
Result := True;
exit;
end;
end;
RaiseSocketError(LastError);
end;
end;
Kann es sein das diese Funktion ein falsches Ergebnis liefert?
Oder ist es Absicht das die Funktion bei einem Fehler der in AIgnore aufgeführt ist True zurück gibt, bei einem Fehler der hingegen nicht aufgeführt ist False und ein Fehler wird ausgelöst. Könnte die Funktion dann nicht generell (außerhalb der Schleife) das Result auf False setzen so das auch False zurück geliefert wird wenn ein nicht zu ignorierender Fehler auftritt?
Das lustige ist das die Funktion so aufgerufen wird:
Delphi-Quellcode:
if GStack.CheckForSocketError(nByteCount, [ID_WSAESHUTDOWN, Id_WSAECONNABORTED, Id_WSAECONNRESET]) then begin
DisconnectSocket;
GStack.RaiseSocketError(GStack.LastError);
end;
Das heißt, selbst wenn die Funktion einen zu ignorierenden Fehelr findet (und somit keine
Exception zurück liefert) wird dann doch eine
Exception geworfen.
Hintergrund des ganzen ist folgendes:
Ich habe eine
FTP-Server welcher auch perfekt mit einigen
FTP-Programmen zusammenarbeitet. Verwende ich aber Opera etc. wird eben der Fehler geworfen und die Datei kann nicht vollständig heruntergeladen werden.