получение ошибки «Служба не найдена» в обработчике async_resolve - PullRequest
1 голос
/ 09 сентября 2009

У меня есть код, который выглядит следующим образом:

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

Когда я запускаю этот код с соответствующими воротами и портом сервера, который, как я знаю, работает, я получаю следующий текст в моем файле журнала: Ошибка: служба не найдена

Кто-нибудь может дать некоторое представление о том, что на самом деле означает эта ошибка?

1 Ответ

2 голосов
/ 09 ноября 2009

В Boost похоже, что эта ошибка может произойти только в результате вызова getaddrinfo (). В MSDN (для чего это стоит) звучит так, будто имя службы (или порт) не поддерживается для типов сокетов, которые поддерживает вызывающая сторона (ASIO?).

Другими словами, кажется , как будто вы пытаетесь установить соединение TCP через сокет не-TCP (маловероятно, так как вы используете классы TCP для разрешения DNS) или не -TCP порт (не уверен, что с этим делать).

Я рекомендую войти в код с помощью отладчика, чтобы увидеть, что происходит не так, хотя это будет намного проще, если вы используете синхронный вызов для разрешения (). В противном случае вам придется установить несколько точек останова на различные внутренние обработчики, которые использует ASIO (не так уж плохо, но все же неприятно). Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...