Have you considering using POE for your TCP server solution? I don't know exactly what it is you are doing, but I am guessing it is some sort of worker thread model. In this case, it is trivial to write a POE-based TCP server to handle quite a few connections "concurrently" depending whether you have long running subs or not. Using a single interpreter will dramatically decrease your memory footprint.
I can't get you a link at the moment (since draconian filters at work block just about everything), but if you go to
the POE wiki and search for evolution of a TCP server, you will find a nice broken down example of going from a simple select based loop all the way to a just a few simple lines of perl using POE::Component::TCP::Server.
If you are concerned with performance you should know that I have written a webserver serving dynamic pages pulling information from a database all using pre-built POE components, and was managing about 45-50 requests a second with streaming connections as well on a silly little Duron 800Mhz with 256MB of RAM. POE is quite efficient.