我正在尝试创建类似于boost.asio示例中的this code的东西。
socket.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 to string”。
我计划自己构建这个示例,看看是否会发生同样的问题,并一定会在这里发布结果。是否有人遇到过此问题或知道可能导致此行为的原因?
编辑:
这个例子运行得很好...我想我有一些调试工作要做。
第二次编辑:
我不明白,唯一不同的是主机/端口。
示例使用char* argv[],而我使用的是:
char host[] = "localhost";
char port[] = "80";第三次编辑:
它确实看起来阻塞在connect,忘记了fflush(stdout)。那么一定是插座有问题。去做更多的测试。
第四次编辑:
愚蠢的我,它根本不是阻塞!我只是太依赖控制台输出了..
发布于 2009-03-24 00:11:37
在printf之后,它可能阻塞了连接调用。
默认情况下,stdout是行缓冲的,因为在printf字符串的末尾没有\n,所以看不到它的输出。当您终止程序时,缓冲区将被刷新,这就是为什么您会看到这条消息。
https://stackoverflow.com/questions/675614
复制相似问题