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. -- Arno Garrels -- 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