On 28.05.2012 16:02, Bernd wrote: > What I would have expected would be some API where I can register > all these connections (outgoing connections, listening sockets, > etc) and then have only one thread blocking in only one call that > will watch all these objects at once, but I can't find any > explanation how this is supposed to be done with lNet.
I can now answer my own question: It seems it is meant to be used in the following way. The first thing I have to do is to have my own instance of a TLEventer class: FEventer: TLEventer; and instantiate it: FEventer := BestEventerClass.Create; and then set a short timeout (1000ms or so) to make the eventer blocking but still be able to check the termination of the thread in regular intervals and create a thread that calls CallAction in an infinite loop: procedure TEventerThread.Execute; begin FEventer.TimeOut := 1000; repeat FEventer.CallAction; until Terminated; end; And then I can create as many TLTcp instances as I need and for every such TLTcp the first thing after creation is to set the Eventer property: FLnetListener := TLTcp.Create(self); with FLnetListener do begin Eventer := FEventer; OnAccept := @OnListenerAccept; FLnetListener.Listen(FListenPort); end; and even more such objects for outgoing connections (one for each connection), each setting the Eventer to the same one and only eventer instance: constructor TBuddy.Create(AClient: IClient); inherited Create; FClient := AClient; FLnetClient := TLTcp.Create(nil); FLNetClient.Eventer := AClient.Eventer; ... end; procedure TBuddy.InitiateConnect; begin with FLnetClient do begin OnConnect := @Self.OnProxyConnect; OnReceive := @Self.OnProxyReceive; OnDisconnect := @Self.OnProxyDisconect; OnError := @Self.OnProxyError; end; FLnetClient.Connect(FClient.TorHost, FClient.TorPort); end; Seems to work quite well, I only have to find out how to properly shut down incoming connections that were disconnected by the other side and then start rapidly firing recv events with 0 bytes (CPU goes 100%), the only way seems to be to set the Dispose property of the TLHandle to true once I receive 0 bytes for the first time on this connection and then pretend the connection is closed but I am not sure if this is allowed and I am not leaking OS handles that way. Also with my code I seem to be able to produce strange crashes inside heaptrc that I have never seen before, still investigating how to reproduce. Bernd _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal