我的代码如下所示:
//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));
}
}
当我运行此代码时,我知道服务器的相应门和端口正在运行,我在我的日志文件中得到以下文本:错误:找不到服务
任何人都可以提供一些有关此错误实际含义的见解吗?
答案 0 :(得分:2)
在Boost中,看起来这个错误只能在调用getaddrinfo()时发生。 In MSDN(对于它的价值而言),听起来调用者(ASIO?)支持的套接字类型不支持服务名称(或端口)。
换句话说,它似乎就像你在非TCP套接字上尝试TCP连接(不太可能,因为你正在使用TCP类进行DNS解析)或者非TCP端口(不知道如何处理)。
我建议使用调试器插入代码以查看出现了什么问题,但如果您使用同步调用来解析()会更容易。否则,您将不得不在ASIO使用的各种内部处理程序上设置多个断点(不是很糟糕,但仍然令人讨厌)。希望有所帮助...