another thing you could do is multithreading your server so it can have more than one client at a time. It's good for when you want any number of clients on a given server but it helps if the code is as reuseable as you can get it. As soon as I get done fighting with an Object/Memory manager I'll see what dig up on issues like this.
Multithreading with sockets is generally a bad idea, usually if you do it wrong. A process can only have ~2000 threads (a lot of the time much less, depending on the system and whatnot), so having a big server can screw things up. Plus processor affinity can play an issue if a client is sending malicious content; it can potentially slow down the main thread, or another crucial thread.
If you want to have something similar to multithreading, it's best practice to use non-blocking sockets.