Passing around boost :: asio :: ip :: tcp :: socket

Muy bien, este es mi fragmento de código actual:

namespace bai = boost::asio::ip;
bai::tcp::socket tcp_connect(std::string hostname, std::string port) {
    try {
        boost::asio::io_service io_service;
        bai::tcp::resolver resolver(io_service);

        // we now try to get a list of endpoints to the server 
        bai::tcp::resolver::query query(hostname, port);
        bai::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
        bai::tcp::resolver::iterator end;

        // looking for a successful endpoint connection
        bai::tcp::socket socket(io_service);
        boost::system::error_code error = boost::asio::error::host_not_found;
        while (error && endpoint_iterator != end) {
            socket.close();
            socket.connect(*endpoint_iterator++ , error);
        }

        if (error) throw boost::system::system_error(error);

        return socket;
    } catch (std::exception &ex) {
        std::cout << "Exception: " << ex.what() << "\n";
    }
}

Que debería devolver unboost::asio::ip::tcp::socket conectado ahostname enport. Sin embargo, me presentan un montón de incomprensiblesboost::noncopyable errores. Pero mi pregunta es, ¿cómo debo pasar estos enchufes entonces? ¿Qué tiene de malo esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta