use boost::asio as communication layer