Autor Beitrag
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Mo 23.03.09 14:23 
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:

ausblenden 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