Boost Asio tcp :: resolver:找不到服务

时间:2011-07-11 09:01:36

标签: c++ boost service boost-asio resolver

我正在尝试使用Boost Asio创建HTTP客户端。我从asio复制了同步客户端示例,编译然后运行。不幸的是,在我的日志中,它显示找不到服务。当我跟踪代码时,我发现它是从以下代码抛出的:

boost::asio::io_service io_service;
// Get a list of endpoints corresponding to the server name.
tcp::resolver resolver(io_service);
//->if i removed the http, it has no error
tcp::resolver::query query("host.com", "http");
//->This part throws the service not found
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
tcp::resolver::iterator end;

有人可以解释为什么没有找到服务或者我该如何解决这个问题?

1 个答案:

答案 0 :(得分:9)

这意味着操作系统不知道哪个端口号对应名称为“http”的TCP服务。

在类似unix的操作系统上,这意味着http 80/tcp中缺少行/etc/services,我可以通过评论该行来重现Linux上的错误。

如果操作系统无法配置为使用服务,您可以使用解析程序中的任何服务"",并在为connect调用创建端点对象时明确指定端口号:

tcp::endpoint connectionEndpoint(endpoint_iterator->address(), 80);
boost::system::error_code ec;
socket.connect(connectionEndpoint, ec);