einen Fehler des Erhaltens in einem async_resolve Handler „Service nicht gefunden“

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

  •  05-07-2019
  •  | 
  •  

Frage

Ich habe Code, der wie folgt aussieht:

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

Wenn ich diesen Code ausführen, mit dem entsprechenden Gate und Port des Servers ich weiß, ein Lauf ist, bekomme ich den folgenden Text in meiner Protokolldatei: Fehler: Dienst nicht gefunden

Kann jemand einen kleinen Einblick in das, was dieser Fehler bedeutet eigentlich?

War es hilfreich?

Lösung

In-Boost sieht es so aus, dass Fehler nur als Ergebnis eines Aufrufs passieren kann getaddrinfo (). In MSDN (für das, was es wert ist), es klingt wie der Service-Name (oder Hafen) ist nicht für die Art der Buchse unterstützt, dass der Anrufer (ASIO?) unterstützt.

Mit anderen Worten, es scheint wie Sie eine TCP-Verbindung sind Sie versuchen, entweder auf einen nicht-TCP-Socket (nicht wahrscheinlich, da Sie TCP-Klassen für Ihre DNS-Auflösung verwenden) oder ein nicht-TCP-Port (nicht sicher, was ist, das zu tun).

Ich empfehle Schritt in den Code mit einem Debugger, um zu sehen, was falsch läuft, obwohl das viel einfacher sein, wenn Sie einen synchronen Aufruf verwenden zu lösen (). Andernfalls werden Sie mehrere Haltepunkte auf den verschiedenen internen Handler, die ASIO verwendet (nicht so schlimm, aber immer noch ein Ärgernis) gesetzt haben. Hoffe, das hilft ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top