As I said before, processing each client in a separate thread designated for that client is not the most efficient way.  The best way to use multithreaded programming to handle the messages would be to use message processing worker threads that are NOT tied to specific clients, that way it can scale up and down based on the activity of TCP messages, not just on the number of clients.
You can do that though if you want, but the architecture would be more difficult.  What you would do, is on the TCP_CONNECT, store the conversation handles in an array and also have an array of ints that are activation flags for your threads. Then ,create a thread for each conversation handle that is idle (while loop checking for activate flag to be set), storin
g the thread IDs in an array with the same indexes at the conversation handle array.
Then, when you get a DATAREADY message, check the conversation handle, find it in the array, then activate the thread (set the activate flag variable for that thread) for that conversation and send it the message contents with a thread safe variable or a thread safe queue.
Again, not as efficient as message worker thread model, but it would work.
Chris