Although threads are fun, using a thread to manage a socket is overkill. You can do just fine using
IO::Select and a single process. UNIX people have been writing single-process socket handling applications for years, and they work very well.
The problem with introducing threads is that you have to make sure your code is thread safe. As soon as you put two trains on the metaphorical track of your program, you're going to have to make sure you're not setting yourself up for disaster.