viene visualizzato un errore di & # 8220; Servizio non trovato & # 8221; in un gestore async_resolve

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

  •  05-07-2019
  •  | 
  •  

Domanda

Ho un codice simile al seguente:

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

Quando eseguo questo codice, con il gate e la porta del server appropriati, so che è in esecuzione, ottengo il seguente testo nel mio file di registro: Errore: servizio non trovato

Qualcuno può fornire qualche idea su cosa significhi effettivamente questo errore?

È stato utile?

Soluzione

In Boost sembra che l'errore possa verificarsi solo a seguito di una chiamata a getaddrinfo (). In MSDN (per quello che vale), sembra che il nome del servizio (o porta) non sia supportato per i tipi di socket supportati dal chiamante (ASIO?).

In altre parole, sembra come se stessi tentando una connessione TCP su un socket non TCP (non è probabile, poiché stai usando le classi TCP per la tua risoluzione DNS) o verso un porta non TCP (non so cosa fare al riguardo).

Ti consiglio di entrare nel codice usando un debugger per vedere cosa non va, anche se sarà molto più semplice se usi una chiamata sincrona per risolvere (). Altrimenti dovrai impostare più punti di interruzione sui vari gestori interni utilizzati da ASIO (non così male, ma comunque fastidiosi). Spero che aiuti ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top