Ich hab das Problem auch in einer Delphi 6 Anwendung. Bei Abbruch der Verbindung wird der Error ausgelöst, was ich nutze um dem Nutzer im Client anzuzeigen, dass gerade keine Verbindung besteht. Hier müsste man eigentlich noch den Error genauer prüfen, aber mir ist es an der Stelle eigentlich egal, warum, hauptsache ich weiß, dass die Verbindung nicht mehr steht.
An dieser Stelle könnte dann auch ein Timer gestartet werden (ist bei mir nicht nötig, da eh einer läuft) der alle X Sekunden einen Reconnect versucht. In meinem Fall guckt er dazu in einer
DB nach den Parametern für Host und Port, da es u.U. sein kann, dass ein anderer Server einspringt und der Client sich einfach mit diesem verbindet.
Delphi-Quellcode:
procedure TMain.ClientSocketError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
if not ClientSocket.Active then
LC.CreateWarnline;
ErrorCode:=0;
end;
procedure TMain.TimerTimer(Sender: TObject);
begin
//...
//Da in meinem Fall der Server alle 30 sek. was schicken soll
//prüfe ich u.a. im Timer, wie alt die letzte Nachricht ist.
//So fällt ein Verbindungsabbruch auch ohne Error auf.
if SecondsBetween(now,LastServerMessage) > 60 then
if not ClientSocket.Active then
begin
ConnectToServer;
end;
if SecondsBetween(now,LastServerMessage) > 120 then
begin
ConnectToServer;
end;
end;