“サービスが見つかりません” async_resolveハンドラー内
-
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が使用するさまざまな内部ハンドラーに複数のブレークポイントを設定する必要があります(それほど悪くはありませんが、依然として迷惑です)。お役に立てば幸いです...
所属していません StackOverflow