Async Resolve с Boost.Asio - PullRequest
       20

Async Resolve с Boost.Asio

0 голосов
/ 13 января 2011

Я пытаюсь асинхронно разрешить FTP-хост, используя Boost.Asio.

Вот что я пробовал до сих пор:

#include <iostream>
#include <string>

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

using boost::asio::ip::tcp;

class FtpSession {
public:
    void Connect(std::string& host) {
        boost::asio::io_service io_service;

        tcp::resolver resolver(io_service);
        tcp::resolver::query query(host, "ftp");

        resolver.async_resolve(query,
            boost::bind(&FtpSession::OnResolve, this, 
                boost::asio::placeholders::error, 
                    boost::asio::placeholders::iterator));
    }

private:
    void OnResolve(const boost::system::error_code& err, tcp::resolver::iterator endpoint_iterator) {
        if (!err)
        {
            std::cout << "resolved!";
        }
        else
        {
            std::cout << "error.";
        }
    }
};

int main() {
    FtpSession session;
    std::string host("ftp.remotesensing.org");

    session.Connect(host);

    return 0;
}

Но по какой-то причине, когда я его выполняю, он просто ничего не печатает:

alon@alon-GA-73PVM-S2H:~/Desktop$ g++ -o test -lboost_system test.cc
alon@alon-GA-73PVM-S2H:~/Desktop$ ./test
alon@alon-GA-73PVM-S2H:~/Desktop$

Нет ошибок или предупреждений при компиляции.

Как я могу это исправить?

Ответы [ 2 ]

5 голосов
/ 13 января 2011

Вам нужно позвонить io_service.run(), чтобы на самом деле выполнить работу.Думайте о async_resolve как о запросе в очереди запросов - вам нужно что-то (io_service) для обработки запросов в очереди, и для этого вам действительно нужно run() это!В этом случае он увидит один запрос, выполнит его, вызовет обработчик и завершит работу.

2 голосов
/ 13 января 2011

Ваш объект io_service и ip::tcp::resolver выходит из области видимости. Переместите их обоих в члены класса FtpSession, затем вызовите io_service::run внутри main после session.Connect(host), чтобы запустить цикл обработки событий.

Я ответил на похожий вопрос несколько дней назад, который также может вам помочь.

...