提高:: ASIO :: IP :: TCP ::变压器::决心()块永远
-
21-08-2019 - |
题
我试图创造尽可能的此代码的在Boost.Asio的实施例中。
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;
}
克++建立此没有任何错误,但代码从不使它经过resolver.resolve()调用。 点击 我都试过“127.0.0.1”和“localhost”的主机和“80”的端口。 (不认为它应该的问题,但apache2的启动和运行)
当我CTRL + C我的申请的,它显然终止但它确实输出“连接到字符串”它之前。
我打造的例子和自己看到规划是否出现同样问题,肯定会在这里发表的结果。有没有人遇到过这个问题或知道什么可能导致此行为?
编辑:结果 该示例运行就好...我有一些调试做我想。
第二编辑:结果 我不明白这一点,这可能是不同的唯一事情是主机/端口。点击 示例使用的char * argv的[]和我使用:结果
char host[] = "localhost";
char port[] = "80";
第三编辑:结果 它似乎确实在连接被阻塞了,忘了fflush(标准输出)。那么它必须与插座有问题。将做一些更多的测试。
第四编辑:结果 愚蠢的我来说,这是不堵了!我只是过分依赖于控制台输出..
解决方案
有可能是阻塞的呼叫连接时,printf的后
stdout是默认缓冲行了,既然你不要在你的printf字符串末尾有一个\ -N,你不会看到它的输出。当你杀程序,缓冲器被刷新,这就是为什么在看到该消息然后
不隶属于 StackOverflow