A few comments,
It would be much more efficient/elegant if you'd rely on a scalable, robust solution such as boost::asio. It'd be much better than select()ing on sockets one at a time, which is pretty inefficient, select() doesn't scale well as it is anyway...
Also, this is definitely not ISO-C++. It looks like "C with classes" style to me, ISO-C++ is pretty damn elegant.
While you're at cleaning it up, and since you seem to be aiming at portability, why don't you start the C++11 movement around here? I mean the memory model is finally standardized and you won't have much trouble with multi-threaded code, so it would be really awesome if you would do the transition.
Oh and, nothing is wrong with C++ iostreams, really. Shaving up a few cpu cycles through early optimizations isn't going to help in the long run, especially when you're sacrificing both readability and safety for those cycles which are probably going to be wasted somewhere else anyway.
That's just my opinion, though.