boost / asio connect, соединение отказано - PullRequest
0 голосов
/ 19 января 2020

Я работаю с libscapi и продолжаю получать ошибки при попытке установить sh соединение с boost :: asio :: connect. Я пытался заставить работать простые примеры (например, приведенный ниже), но всегда получаю сообщение об ошибке «отказано в соединении». Наверное, это очень простая ошибка, но я просто не понимаю ее.

#include <boost/asio.hpp>
#include <iostream>


int main(int argc, char* argv[]) {

    boost::asio::io_service io_service; 
    boost::asio::ip::tcp::endpoint endpoint;
    boost::asio::ip::tcp::resolver resolver(io_service);
    boost::asio::ip::tcp::resolver::query query("www.boost.org", "http");
    boost::asio::ip::tcp::resolver::iterator iter = resolver.resolve(query);
    boost::asio::ip::tcp::resolver::iterator end; // End marker.

    while (iter != end)
    {
        boost::asio::ip::tcp::endpoint endpoint = *iter++;
            std::cout << endpoint << std::endl;
    }

    boost::asio::ip::tcp::socket socket(io_service);
    socket.connect(endpoint);
}

1 Ответ

0 голосов
/ 20 января 2020

Вы передаете построенную конечную точку по умолчанию для connect, что просто недопустимо. Если у вас есть список конечных точек, заданных [iter,end) итераторами, вы должны проверить каждую из них, передавая его connect:

boost::asio::ip::tcp::socket socket(io_service);

while (iter != end)
{
    boost::asio::ip::tcp::endpoint endpoint = *iter++;
        std::cout << endpoint << std::endl;
    boost::system::erroc_code err;
    socket.connect(endpoint,err);
    if ( !err ) // there is no error
    {
       // connection is established, we can break loop
       break;
    }
    else {
         std::cout << "ups, we have problem" << std::endl;
    }
}

В более простой версии можно использовать бесплатную connect функция, которая принимает оба итератора:

boost::asio::ip::tcp::socket socket(io_service);
boost::system::error_code err;
boost::asio::connect(socket,iter,end,err);
if (!err)
    std::cout << "connected" << std::endl;
...