1

我的代码如下所示:

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

当我运行此代码时,使用我知道正在运行的服务器的适当门和端口,我在日志文件中得到以下文本:错误:找不到服务

谁能提供一些有关此错误实际含义的见解?

4

1 回答 1

2

在 Boost 中,该错误似乎只能在调用 getaddrinfo() 时发生。 在 MSDN中(就其价值而言),听起来调用者(ASIO?)支持的套接字类型不支持服务名称(或端口)。

换句话说,您似乎正在尝试在非 TCP 套接字(不太可能,因为您使用 TCP 类进行 DNS 解析)或非 TCP 端口(不确定该怎么做)上的 TCP 连接关于那个)。

我建议使用调试器单步执行代码以查看问题所在,但如果您使用同步调用 resolve() 会容易得多。否则,您将不得不在 ASIO 使用的各种内部处理程序上设置多个断点(不是那么糟糕,但仍然很麻烦)。希望有帮助...

于 2009-11-09T17:58:52.160 回答