Einzelnen Beitrag anzeigen

spitzley

Registriert seit: 4. Jan 2005
2 Beiträge
 
#1

TClientSocket verbraucht Ports (Fehler 10055)

  Alt 26. Jun 2005, 11:49
Mein Problem ist folgendes:

(Betriebssystem Win XP prof.)

n TCP-Clients sollen einen TCP-Server connecten. Bei einem Verbindungsabriss sollen die Clients einen ReConnect bis zum Erfolg durchführen.
Die Reconnects werden pro Client über einen Timer durchgeführt:

Delphi-Quellcode:
procedure TNetRouter.OnGateway1ReconnectServerTimer(Sender: TObject);
begin
  if FGateway1Activate and not(FGateway1Connected) then
    begin
      if FGateway1AutoReconnect then
        begin
          inc(FGateway1NoOfConnectRetries);
          Gateway1TCPClientSock.Open;
        end;
      FGateway1ReconnectServerTimer.Enabled:=false;
      (Connect-Error schaltet Timer wieder ein)
    end;
end;
Bei jedem Reconnect (alle 3 Sek. pro Client) wird ein neuer Port verwendet und das mündet nach einiger Zeit, wenn alle Ports aufgebraucht sind, in einem Absturz (Fehler 10055).

Auch anderere Clients "fressen" Ports auf. Bsw. Hyperterminal, Indy-Demo-TCP-Client etc.
Das ganze scheint aber ein Win-Problem zu sein. Windows gibt die bereits verwendeten Ports nicht schnell genug wieder frei. So das Ergebnis einer Google-Recherche. Auch die gefundenen
Work-Arounds greifen nicht. (MaxUserPorts etc.)

Meine Frage also:
Kennt jemand eine Lösung für stabile Reconnects für viele TCP-Clients?

[edit=alcaeus]Delphi-Tags eingefuegt. In Zukunft bitte selbst machen. Danke Mfg, alcaeus[/edit]
  Mit Zitat antworten Zitat