私はboost.asioの例で見つけたthis codeのようなものを作成しようとしています。boost :: asio :: ip :: tcp :: resolver :: resolve()blocks forever
の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:エラーなしにこれを構築しますが、コードはresolver.resolve()の呼び出しを過ぎてそれを作ることはありません++
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;
}
グラム。
ホストの場合は「127.0.0.1」と「localhost」、ポートの場合は「80」の両方を試しました。 (問題はないと思うが、apache2が起動している)
アプリケーションからCtrl + Cを押しても明らかに終了しますが、直前に「文字列への接続」が出力されます。
私はこのサンプルを自分で作成し、同じ問題が発生しているかどうかを確認していますが、結果をここに必ず掲載します。誰かがこの問題に遭遇したか、またはこの動作を引き起こす可能性があることを知っていますか?
編集:
この例はうまく動作します...私はいくつかのデバッグを想定しています。
第2編集:
私はそれを得ることはできませんが、唯一の違いはホスト/ポートです。
例は、[]のchar *のARGVを使用し、私が使用しています:
char host[] = "localhost";
char port[] = "80";
第三編集:それは確かに接続でブロックしているように見える
は、(標準出力)をFFLUSHのを忘れていました。ソケットに問題がなければなりません。もう少しテストをするつもりです。
第4編集:
愚かな私は全くブロックしていませんでした!私はコンソール出力にあまりにも頼っていました。
あなたが正しいです。それはソケットの問題でなければなりません。 –
ソケットには問題はありませんが、出力を見ることでブロックされていると私は思っています。この回答は、私がそれを理解するのを助けました:) –