5

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();
        }
};

ソケット.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を押すと、明らかに終了しますが、終了する直前に「文字列に接続しています」と出力されます。

私は自分で例を作成し、同じ問題が発生するかどうかを確認することを計画しており、間違いなくここに結果を投稿します. 誰かがこの問題に遭遇したか、またはこの動作の原因を知っていますか?

編集:
この例は問題なく実行されます...デバッグを行う必要があると思います。

2番目の編集:
わかりません。異なる可能性があるのは、ホスト/ポートだけです。
例では char* argv[] を使用しており、私は以下を使用しています:

char host[] = "localhost";
char port[] = "80";

3番目の編集:
確かに接続時にブロックされているようで、fflush(stdout)を忘れていました。それならソケットに問題があるはずです。さらにテストを行う予定です。

4番目の編集:
ばかげて、まったくブロックされていませんでした!私はコンソール出力に頼りすぎていました..

4

1 に答える 1