我试图创造尽可能的此代码的在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,你不会看到它的输出。当你杀程序,缓冲器被刷新,这就是为什么在看到该消息然后

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top