boost::optional read_result; boost::asio::async_write(*socket, boost::asio::buffer(data, size), [&read_result](const boost::system::error_code& error, size_t) { read_result.reset(error); }); socket->get_io_service().reset(); while(socket->get_io_service().run_one()) { }