$selectFD = new IO::Select($rec[$RXThreadNumber], undef, undef, 1);
The immediate problem I can see with your code is the above call. The constructor for IO::Select doesn't take the same parameters as the select function. It takes a list of handles. Check the IO::Select
pod for more information. This means that your timeout isn't begin set properly, and you experience the symptoms of this.
$|++; # flush the buffer apparently...
If you want to know more about how this works, you need to read the perlvar
pod. If you use the IO::Handle classes for your filehandles you can use their autoflush method to make this nicer.
integral, resident of freenode's #perl