Thanks, Wilfried.  That's what I'm doing now.  However, I'm doing it 
from the end of the Execute() method of the worker thread, right before 
destroying the server, like this:

Procedure WorkerThread.Execute;
Begin
   _InitializeSrv();  // create
   Try
     Srv.MessageLoop();
   Finally
     Try
       For n := 0 to (Srv.ClientCount - 1) Do Begin
         Srv.Clients[n].SendStr('bye'#13#10);
         Srv.Clients[n].ShutDown(1);
       End;
     Finally
       Srv.Free;
     End;
   End;
End;

The problem that I saw was that Calling Shutdown(1) would cause the 
server to trigger OnClientDisconnect, which may fire *after* the thread 
and client were distroyed by Srv.Free, which will raise an exception 
that I would like to avoid if possible.  So, what I did was not call 
ShutDown(1), and expect the shutdown to occur when destroying the Srv, 
like this:

     Try
       Srv.Shutdown(0); // make sure we do not accept anybody else!
       For n := 0 to (Srv.ClientCount - 1) Do Begin
         Srv.Clients[n].SendStr('bye'#13#10);
       End;
     Finally
       Srv.Free; // Shutdown clients as well
     End;

Is that appropriate, or can you see something wrong with it?

        Thanks!
        dZ.

P.S. I haven't received any messages from this list in the past two 
days.  Is it still alive, or am I having e-mail issues?

-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to