我正在尝试创建类似于
this code
在boost.asio示例中找到。
插座:
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();
}
};
Copp.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从应用程序中删除时,它显然会终止,但它会在输出“connecting to string”之前输出它。
我正计划自己构建这个例子,看看是否也出现了同样的问题,并且肯定会在这里发布结果。是否有人遇到过此问题或知道什么可能导致此行为?
编辑:
这个例子运行得很好…我想我还有一些调试工作要做。
第二次编辑:
我不明白,唯一可能不同的是主机/端口。
示例使用char*argv[],我使用的是:
char host[] = "localhost";
char port[] = "80";
第三编辑:
它确实似乎在连接处阻塞,忘记了fflush(stdout)。那么它一定是插座出了问题。还要做些测试。
第四编辑:
愚蠢的我,它一点也不阻挡!我只是太依赖控制台输出了。