在async_resolve处理程序中收到“Service not found”错误

时间:2009-09-09 16:47:31

标签: c++ boost-asio

我的代码如下所示:

//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 个答案:

答案 0 :(得分:2)

在Boost中,看起来这个错误只能在调用getaddrinfo()时发生。 In MSDN(对于它的价值而言),听起来调用者(ASIO?)支持的套接字类型不支持服务名称(或端口)。

换句话说,它似乎就像你在非TCP套接字上尝试TCP连接(不太可能,因为你正在使用TCP类进行DNS解析)或者非TCP端口(不知道如何处理)。

我建议使用调试器插入代码以查看出现了什么问题,但如果您使用同步调用来解析()会更容易。否则,您将不得不在ASIO使用的各种内部处理程序上设置多个断点(不是很糟糕,但仍然令人讨厌)。希望有所帮助...