AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Liefert CheckForSocketError falsches Ergebnis?
Thema durchsuchen
Ansicht
Themen-Optionen

Liefert CheckForSocketError falsches Ergebnis?

Ein Thema von SirThornberry · begonnen am 14. Dez 2007 · letzter Beitrag vom 14. Dez 2007
Antwort Antwort
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#1

Liefert CheckForSocketError falsches Ergebnis?

  Alt 14. Dez 2007, 12:16
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Liefert CheckForSocketError falsches Ergebnis?

  Alt 14. Dez 2007, 13:11
Ohne die Indys wieter zu kennen geht es hierbei doch um die Methode Disconnectsocket.

Prinzipiell gibt es drei Möglichkeiten:
1. Kein Fehler aufgetreten (AResult<>Socket_Error)
Result der Funktion ist False --> nix passiert
2. Fehler aufgetreten der in AIgnore steht
Result ist true (in der Funktion passiert sonst nix weiter)
--> Ausserhalb der Funktion wird dann Disconnect und schließlich RaiseException aufgerufen
3. Fehler aufgetreten der nicht in AIgnore steht
Result ist unerheblich
Es wird direkt RaiseException aufgerufen (ohne Disconnect)

(ich nehme an in der Methode RaiseException passiert das, was der Name verspricht)

Ich sehe als kein Problem in dieser Methode.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Liefert CheckForSocketError falsches Ergebnis?

  Alt 14. Dez 2007, 13:37
ich hatte probehalber mal die Funktion abgeändert und dann geht nichts mehr (endlosschleife).
Dann muss ich den Fehler mal wo anders suchen warum bei bestimmten Clients vorzeitig nix mehr entgegen genommen wird.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz