Dan*_*oof 5 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... */
io_service.run();
}
};
Run Code Online (Sandbox Code Playgroud)
套接字.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;
}
Run Code Online (Sandbox Code Playgroud)
g++ 构建它没有任何错误,但代码从未使它通过 resolver.resolve() 调用。
我已经为主机尝试了“127.0.0.1”和“localhost”,为端口尝试了“80”。(不要认为它应该重要,但是 apache2 已启动并正在运行)
当我 ctrl+c 退出我的应用程序时,它显然终止了,但它确实在它之前输出了“连接到字符串”。
我打算自己构建示例并查看是否出现相同的问题,并且肯定会在此处发布结果。有没有人遇到过这个问题或知道什么可能导致这种行为?
编辑:
这个例子运行得很好......我想我有一些调试要做。
第二次编辑:
我不明白,唯一可能不同的是主机/端口。
示例使用 char* argv[] ,我正在使用:
char host[] = "localhost";
char port[] = "80";
Run Code Online (Sandbox Code Playgroud)
第三次编辑:
它确实似乎在连接时阻塞,忘记了 fflush(stdout)。那么一定是socket有问题。要做更多的测试。
第四次编辑:
愚蠢的我,它根本没有阻塞!我只是太依赖控制台输出了..
它可能在 printf 之后的连接调用上被阻塞。
stdout 默认情况下是行缓冲的,并且由于 printf 字符串末尾没有 \n,因此您将看不到它的输出。当您终止程序时,缓冲区将被刷新,这就是您看到该消息的原因。
| 归档时间: |
|
| 查看次数: |
7721 次 |
| 最近记录: |