“サービスが見つかりません” async_resolveハンドラー内

StackOverflow https://stackoverflow.com/questions/1400787

  •  05-07-2019
  •  | 
  •  

質問

次のようなコードがあります:

//unrelated code snipped
resolver.reset(new tcp::resolver(iosvc));
tcp::resolver::query query(host, port);
resolver->async_resolve(query,
    boost::bind(&TCPTransport::handle_resolve, this,
      boost::asio::placeholders::error,
      boost::asio::placeholders::iterator));

LOG4CXX_INFO(logger, "Attempting connection to at " << host << ":" << port);
//unrelated code snipped



void TCPTransport::handle_resolve(const boost::system::error_code& err,
  tcp::resolver::iterator endpoint_iterator)
{
  if (err)
  {
    LOG4CXX_ERROR(logger, "Error: " << err.message());
  }
  else
  {
    tcp::endpoint endpoint = *endpoint_iterator;
    if (!socket)
    {
      socket.reset(new tcp::socket(iosvc));
    }
    socket->async_connect(endpoint,
      boost::bind(&TCPTransport::handle_connect, this,
        boost::asio::placeholders::error, ++endpoint_iterator));
  }
}

実行中のサーバーの適切なゲートとポートでこのコードを実行すると、ログファイルに次のテキストが記録されます。エラー:サービスが見つかりません

このエラーが実際に何を意味するのか、誰でも洞察を提供できますか?

役に立ちましたか?

解決

Boostでは、getaddrinfo()の呼び出しの結果としてのみエラーが発生するようです。 MSDNで(価値がある)呼び出し元(ASIO?)がサポートするソケットのタイプでは、サービス名(またはポート)がサポートされていないようです。

つまり、非TCPソケット(DNS解決にTCPクラスを使用しているためではない可能性が高い)またはTCP接続でTCP接続を試行しているようです 非TCPポート(それについてどうすればよいかわからない)。

デバッガーを使用してコードにステップインし、何が問題なのかを確認することをお勧めしますが、resolve()に同期呼び出しを使用する方がはるかに簡単です。それ以外の場合は、ASIOが使用するさまざまな内部ハンドラーに複数のブレークポイントを設定する必要があります(それほど悪くはありませんが、依然として迷惑です)。お役に立てば幸いです...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top