首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost::asio::ip::tcp::resolver::resolver::resolver()块永远

boost::asio::ip::tcp::resolver::resolver::resolver()块永远
EN

Stack Overflow用户
提问于 2009-03-23 23:26:42
回答 1查看 7.8K关注 0票数 5

我正在尝试创建类似于boost.asio示例中的this code的东西。

socket.h:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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 to string”。

我计划自己构建这个示例,看看是否会发生同样的问题,并一定会在这里发布结果。是否有人遇到过此问题或知道可能导致此行为的原因?

编辑:

这个例子运行得很好...我想我有一些调试工作要做。

第二次编辑:

我不明白,唯一不同的是主机/端口。

示例使用char* argv[],而我使用的是:

代码语言:javascript
复制
char host[] = "localhost";
char port[] = "80";

第三次编辑:

它确实看起来阻塞在connect,忘记了fflush(stdout)。那么一定是插座有问题。去做更多的测试。

第四次编辑:

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-03-24 00:11:37

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

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/675614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档