Lukas Skala wrote: > hello, > thank for quick and useful response. > i'll try to upgrade to V7 now because i'm still getting error > (catched by Server.OnBgException event), I'm getting AccessViolation > or InvalidOperation exceptions.
Sounds like you are accessing pointers or objects when they have been already freed. > These errors occurs after disconnecting client by server (i'm using > timer - in same way as you adviced me). Huh? I haven't advised how to use a TTimer. Using a timer might be tricky and the reason for your problem. An example of using a timer to detect client timeouts is THttpServer that encapsulates a TWSocketServer component. It uses method TWSocketServer.Disconnect() to close timed out clients in procedure THttpServer.HeartBeatOnTimer(Sender: TObject);. > I have tried to add C.Free > call but I have thought it was nonse (you have confirmed it me). Yes, the server gives and the server takes ;) > > One question for sure: > > When I call Client.Close the Client will be freed automatically > (destructor of Client will be called)? Yes, TWSocketServer manages the client objects, do not free them, just Close or Disconnect them, that's all. -- Arno Garrels > > thank you again > have a nice day > lukas skala > > > > Dne 21.7.2011 17:29, Arno Garrels napsal(a): >> Lukas Skala wrote: >>> hello, >>> I have server application based on TWSocketServer, clients are >>> derived from TWSocketClient class. >>> I need disconnect inactive clients. I'm not sure how to disconnect >>> client, I'm using this: >>> >>> procedure DisconnectMyClient(i: Integer); >>> var >>> C: TTcpSrvClient; >>> {TTcpSrvClient = class(TWSocketClient)} >>> begin >>> C := Server.Client[I] as TTcpSrvClient; >>> C.Close; >> That works, though "Server.Client[I].Close" would be enough. >> >> If want to close clients while iterating over the client list >> make sure you iterate from high index down to zero like: >> >> for I := Server.ClientCount -1 downto 0 do >> Server.Client[I].Close; >> >> A more brutal method to enforce client close was >> Server.Disconnect(). >> >>> C.Free; {Is this correct? sometimes it will throw access violation >>> here....} end; >> That's wrong, don't do that. Client objects are freed and >> removed from the internal client list when they are closed >> or disconnected automatically by the server. >> >>> >>> I'm using ICS v6. >> You should update to ICSv7. >> >>> I did notice that Server.OnClientDisconnect event is not triggered >>> when client is not closed correctly (e.g. client is plugged of >>> ethernet). >> That's the expected behaviour. >> >>> Is there any possibility to detect and/or disconnect these >>> clients automatically? >> Implement an idle timeout at the server side. Let the client send >> some keep alive data in intervals so the server knows a client is >> still there. -- To unsubscribe or change your settings for TWSocket mailing list please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket Visit our website at http://www.overbyte.be