c++ - boost.asio boost::asio::ip::tcp::resolver::async_resolve 不起作用

标签 c++ sockets boost boost-asio

我按照Boost.Asio toturial实现了一个简单的TCP客户端,但是我在第一步就被阻止了,boost::asio::ip::tcp::resolver::async_resolve不起作用,ResolverHandler 永远不会被调用:

    void client::start()
    {
        socket_.reset(new boost::asio::ip::tcp::socket(io_service_));
        // Start an asynchronous resolve to translate the server and service names
        // into a list of endpoints.
        tcp::resolver::query query(server_address_, server_port_);
        resolver_.async_resolve(query,
            boost::bind(&client::handle_resolve, 
            shared_from_this(),
            boost::asio::placeholders::error,
            boost::asio::placeholders::iterator));
    }

如上面所示的源代码,我创建了一个 io_service、一个 socket、一个 resolver 和一个解析器 query 对象,然后调用 resolver_.async_resolve() 方法,但是 ResolverHandler client::handle_resolve 几乎不会被调用,有时在应用程序第一次启动时, ResolverHandler 可能会被调用一两次,但仅此而已。

我阅读了官方文档,但一无所获。有什么建议吗?

最佳答案

如果完成处理程序没有被调用——很可能你没有正确运行io_service:例如。它的 run 循环可能被其他未返回的处理程序阻塞,或者可能由于缺乏工作而退出等。

关于c++ - boost.asio boost::asio::ip::tcp::resolver::async_resolve 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14908860/

相关文章:

c++ - std::atomic<X>::value_type 发生了什么?

c++ - 为什么我使用 HeapMemView 找不到分配在堆上的内存?

android - 如何在不配对的情况下使用蓝牙在Android编程中发送和接收数据?

java - 当 HTTP 通过 TCP 工作时,如何使用 HTTP (Tomcat) 创建超过 14000 个客户端,因此创建了套接字

c++ - 即使成功打开数据库,sqlite_prepare_v2 也会给出错误 #26(文件不是数据库)

C++11 用户定义字面量

java - Oracle 服务总线 11G REST api Java 连接到 OSB 时出现套接字问题

c++ - boost::named_mutex:在最后一个进程关闭时安全清理

c++ - boost 、互斥概念

c++ - Visual Studio 2013 VC++ 编译器