If you really do not like the use of select for socket read then you need to add one more reason to use boost::asio : Get read of select