obtention d'une erreur de «service introuvable» dans un gestionnaire async_resolve

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

  •  05-07-2019
  •  | 
  •  

Question

J'ai un code qui ressemble à ce qui suit:

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

Lorsque j'exécute ce code avec le port et le port appropriés du serveur dont je sais qu'il est en cours d'exécution, le texte suivant s'affiche dans mon fichier journal: Erreur: service introuvable.

Quelqu'un peut-il donner un aperçu de ce que cette erreur signifie réellement?

Était-ce utile?

La solution

Dans Boost, il semble que cette erreur ne puisse se produire qu'à la suite d'un appel à getaddrinfo (). Dans MSDN (à sa juste valeur), il semble que le nom du service (ou du port) ne soit pas pris en charge pour les types de socket pris en charge par l'appelant (ASIO?).

En d'autres termes, il semble que vous essayez d'établir une connexion TCP sur un socket non-TCP (ce qui est peu probable, car vous utilisez des classes TCP pour votre résolution DNS) ou port non-TCP (vous ne savez pas quoi faire à ce sujet).

Je vous recommande d'entrer dans le code en utilisant un débogueur pour voir ce qui ne va pas, mais ce sera beaucoup plus facile si vous utilisez un appel synchrone pour résoudre (). Sinon, vous devrez définir plusieurs points d'arrêt sur les différents gestionnaires internes utilisés par ASIO (pas si mal, mais quand même une nuisance). J'espère que ça aide ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top