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]