الحصول على خطأ "الخدمة غير موجودة" في معالج 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));
  }
}

وعند تشغيل هذا الرمز، مع البوابة وميناء المناسبة لخادم أعرف أن تصل إلى تشغيل، وأحصل على النص التالي في ملف سجل لي: خطأ: خدمة لم يتم العثور على

ويمكن لأي شخص أن يقدم بعض التبصر في ما يعني هذا الخطأ فعلا؟

هل كانت مفيدة؟

المحلول

في تفعيل يبدو أن الخطأ يمكن أن يحدث فقط نتيجة للدعوة إلى getaddrinfo في (). في MSDN (وعلى ما يستحق)، هذا يبدو وكأنه اسم الخدمة (أو المنفذ) غير معتمد لأنواع من مأخذ أن المتصل (اسيو؟) يدعم.

وبعبارة أخرى، فإنه <م> يبدو وكأنك تحاول اتصال TCP على أي مأخذ غير TCP (لا يحتمل، منذ كنت تستخدم الطبقات TCP لقرار DNS الخاص بك) أو ل ميناء غير TCP (غير متأكد ما يجب فعله حيال ذلك).

وأوصي يخطو إلى التعليمات البرمجية باستخدام مصحح لمعرفة ما يحدث خطأ، على الرغم من أنه سيكون أسهل كثيرا إذا كنت تستخدم استدعاء متزامن لحل (). وإلا سيكون لديك لتعيين نقاط متعددة على مختلف معالجات الداخلية التي تستخدم اسيو (لم يكن سيئا، ولكن لا يزال مصدر ازعاج). على أمل أن يساعد ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top