Ich habe ein TServerSocket auf einen bestimmten Port gesetzt. Es nimmt alle Clientverbindungen an und kann auch Daten senden/empfangen.
So weit so gut.
Wenn ich jetzt aber ein Client abnormal beende (z.B. über Taskmanager) dann bekommt der Server einen Fehler "Eine bestehende Verbindung wurde softwaregesteuert durch den Hostcomputer abgebrochen"
Die kann ich abfangen und gut ist. Leider wird der Client immernoch als aktiv angezeigt. Er ist also noch in sServer.Socket.ActiveConnections mitgezählt und hat noch die Remoteadress und RemoteIP
warum das? wie kann ich den rausschmeißen, wenn der prozess beendet wird?
manuell habe ich es jetzt so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.sServerClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin Log('Error: '+SysErrorMessage(ErrorCode)); ErrorCode:=0; if(ErrorEvent=eeDisconnect) then begin Socket.Close; Socket.Free; end; updateList(); end; |
aber ob das immer so klappt weiß ich nicht