C++ boost::asio::ip::tcp::resolver::resolve()永远阻塞

C++ boost::asio::ip::tcp::resolver::resolve()永远阻塞,c++,boost,g++,boost-asio,resolver,C++,Boost,G++,Boost Asio,Resolver,我正在尝试创建类似于boost.asio示例中的内容 插座h: class some_class { private: ... boost::asio::io_service io_service; public: some_class() { /* This stuff isn't used in the example... ...but it doesn't change anything...

我正在尝试创建类似于boost.asio示例中的内容

插座h:

class some_class {
private:
    ...
        boost::asio::io_service io_service;
public:
        some_class() {
             /* This stuff isn't used in the example...
               ...but it doesn't change anything... */
             io_service.run();
        }
};
socket.cpp:

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

bool some_class::connect(char* host, char* port) 
{
    printf("Resolving hostname...\n");

    /* Resolve hostname. */
    tcp::resolver resolver(io_service);
    tcp::resolver::query query(tcp::v4(), host, port);
    tcp::resolver::iterator iterator = resolver.resolve(query);

    printf("Connecting to %s:%s... ", host, port);

    /* Connect to resolved hosts. */
    sock->connect(*iterator);

    return true;
}
g++构建此代码时没有任何错误,但代码从未通过resolver.resolve()调用。
对于主机,我尝试了“127.0.0.1”和“localhost”,对于端口,我尝试了“80”。(我认为这无关紧要,但apache2已经启动并运行)

当我在应用程序中按ctrl+c组合键退出时,它显然会终止,但它确实会在退出之前输出“连接到字符串”

我计划自己建立这个例子,看看是否会出现同样的问题,并且一定会在这里发布结果。有没有人遇到过这个问题,或者知道什么可能导致这种行为

编辑:
这个例子运行得很好。。。我想我还有一些调试要做

第二次编辑:
我不明白,唯一不同的是主机/端口。
示例使用char*argv[],我使用:

char host[] = "localhost";
char port[] = "80";
第三次编辑:
它似乎确实在连接时阻塞了,忘记了fflush(stdout)。那一定是插座出了问题。我还要做一些测试

第四次编辑:

愚蠢的我,它根本就没有阻塞!我只是太依赖控制台输出了

它可能在printf之后阻塞了连接调用


默认情况下,stdout是行缓冲的,并且由于printf字符串末尾没有\n,因此将看不到其输出。当您终止程序时,缓冲区正在被刷新,这就是为什么您会看到消息。

套接字没有问题,只是我假设它通过查看输出被阻塞了。这个答案帮助我明白了这一点,我接受了:)