AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Socket-Fehler 10055
Thema durchsuchen
Ansicht
Themen-Optionen

Socket-Fehler 10055

Ein Thema von Chrisa · begonnen am 5. Jan 2009 · letzter Beitrag vom 6. Jan 2009
Antwort Antwort
Chrisa

Registriert seit: 20. Okt 2003
Ort: Stockelsdorf
15 Beiträge
 
Delphi 7 Enterprise
 
#1

Socket-Fehler 10055

  Alt 5. Jan 2009, 06:34
Hallo,
ich habe folgendes Problem mit den Sockets in Delphi 7. Ich versuche mit einem TClientSocket alle 5 Sekunden eine Verbindung zum Server herzustellen (ClientSocket1.Open), wenn dieser beim ersten Versuch nicht erreichbar ist. Sobald die Verbindung erfolgreich aufgebaut werden konnte, wird diese Prozedur natürlic gestoppt. Jedoch erhalte ich nach einiger Zeit (auf meinem Rechner nach ca. 7400, auf meinem Laptop nach ca. 4000 Verbindungsversuchen) den Socket-Error 10055. Der Socket-Buffer oder die Warteschlange ist voll. Jedoch lasse ich bei jedem Socket-Fehler (in der Prozedur ClientSocket1Error) den Socket eigentlich schliessen.
Delphi-Quellcode:
procedure TForm1.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
...
ErrorCode:=0;
Socket.Close;
ClientSocket1.Close;
...
end;
Wenn ich im Taskmanager mir den Speicherverbrauch der Anwendung anschaue und beobachte, fällt mir auf, dass dieser immer größer wird. Selbst wenn ich den Socket lösche (ClientSocket1.Free) verringert sich der Speicherverbrauch nur um ca. 4 KB, auch wenn der vorher durch die Verbindungsversuche schon um viel mehr angestiegen ist als 4 KB.
Habe schon hier im Forum geguckt und gegooglt, jedoch keine akzeptable Lösung gefunden. Kann man die (anscheind) noch offenen Verbindungen löschen/beenden?

mfG Chrisa
  Mit Zitat antworten Zitat
Darkface

Registriert seit: 18. Apr 2008
89 Beiträge
 
Delphi XE Professional
 
#2

Re: Socket-Fehler 10055

  Alt 5. Jan 2009, 06:57
Das Problem ist das du viel zu schnell versuchst eine neue Verbindung aufzubauen! Wie er dir ja auch sagt, die Warteschlange auf Verbindungsversuche kann dann nicht mehr abgearbeitet werden. Ein Verbindungsversuch braucht länger als 5 sec!

MfG Darkface

[EDIT] Ach ja und dem entsprechend wird das Error - Event auch erst längere Zeit nach deinen 5 sec ausgeführt! Nämlich genau dann wenn er wirklich erst den Verbindungsversuch abbricht! Versuche den nächsten Versuch erst dann zu starten wenn das Error-Event ausgelöst wurde!
Alexander
Ich halte Ordnung.
Zum Beispiel mein Schreibtisch: Hier ist alles zeitlich geordnet - was zuletzt kam, liegt oben. (Frank Erhoff)
  Mit Zitat antworten Zitat
Chrisa

Registriert seit: 20. Okt 2003
Ort: Stockelsdorf
15 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Socket-Fehler 10055

  Alt 5. Jan 2009, 10:28
erstmal, danke für die schnelle Antwort, aber so sicher wäre ich da nicht. Habe auch einfach mal zum testen n stopper mit reingebastelt, der den ständigen Verbindungsaufbau abbricht. Selbst nach 15 Minuten, war der Speicherplatzverbrauch des Programms genausohoch wie vor dem stoppen. Und bei mir aufm Rechner kam zumindest wenn man das "ErrorCode:=0" weglässt in weniger als 5 sekunden schon ein Error über den Bildschrim gewandert. Aber ich werd nochmal n Testlauf starten, wie lange er durchhält ohne Error mit 10-15 Sekunden. Vllt. klappts ja wirklich dann würde ich mich nur über den sinnlos verbratenen Speicher wundern.
mfg Chrisa
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

Re: Socket-Fehler 10055

  Alt 5. Jan 2009, 11:50
Hallo,

wie machst Du das mit der Fehlerbehandlung?

Delphi-Quellcode:
procedure TForm1.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
...
  Try
    ...
    Socket.Open;
    ClientSocket1.Open;
    ...
  Except
    ErrorCode:=0;
    Socket.Close;
    ClientSocket1.Close;
  end;
...
end;
Wenn der Fehler 10055 ausgelöst wird, tritt eine Exception auf, eventuell kommst Du dadurch nicht mehr am Close und/oder den Stellen, an denen Du irgendwas freigibst, vorbei.

Stephan
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Socket-Fehler 10055

  Alt 5. Jan 2009, 12:02
Hallo,

ich hatte mal das gleiche Problem.

Ich habs sinngemäß so gelöst:

Delphi-Quellcode:
procedure TForm1.Timer_toggleTimer(Sender: TObject); var
  S_Address: String;

begin
  ClientSocket1.Active := false;

  //ClientSocket schliessen
  ClientSocket1.Socket.Close;
  ClientSocket1.Close;

  //Port und Adresse setzen
  ClientSocket1.Port := SpinEdit_Port.Value;
  ClientSocket1.Address := S_Address;

  try
    ClientSocket1.Open;
  except
    ClientSocket1.Active := false;
    ClientSocket1.Socket.Close;
    ClientSocket1.Close;
  end;
end;
Sinngemäß deswegen, dass ich das früher so hatte, in der Zwischenzeit umgebaut habe. Aber es funktioniert noch so wie oben beschrieben.

Der Timer heisst bei mir Timer_toggle und ist so auf 5000 ms (5s) eingestellt
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Chrisa

Registriert seit: 20. Okt 2003
Ort: Stockelsdorf
15 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Socket-Fehler 10055

  Alt 6. Jan 2009, 14:42
vielen Dank für eure Antowrten. Habe nun einmal versucht den Timer höher zu stellen und das scheint bis jetzt zu funktionieren. Immerhin hat er schon 12600 fehlgeschlagene Versuche ohne Error hintersich. Und Helmi's Lösung scheint zu funktionieren Vielen Dank. Habe einfach mal zum testen den Timer auf nur 2 Sekunden gestellt, und der Zähler ist schon bei 24000 Versuchen ohne Error.
mfG Chrisa
  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 17:54 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