std::error_code ec;
io_context ctx;
ip::tcp::resolver resolv(ctx);
- auto addrs = resolv.resolve("localhost", "http", ec);
+ auto hostname = "localhost", service = "http";
+ auto addrs = resolv.resolve(hostname, service, ec);
+ if (ec == ip::resolver_errc::service_not_found)
+ {
+ // Solaris doesn't have http in /etc/services, try some others.
+ for (auto serv : {"ftp", "telnet", "smtp"})
+ {
+ addrs = resolv.resolve(hostname, serv, ec);
+ if (!ec)
+ {
+ service = serv;
+ break;
+ }
+ }
+ }
VERIFY( !ec );
VERIFY( addrs.size() > 0 );
VERIFY( addrs.begin() != addrs.end() );
VERIFY( ! addrs.empty() );
- auto addrs2 = resolv.resolve("localhost", "http");
+ auto addrs2 = resolv.resolve(hostname, service);
VERIFY( addrs == addrs2 );
}
#if __cpp_exceptions
bool caught = false;
try {
- resolv.resolve("localhost", "http", flags);
+ resolv.resolve("localhost", "42", flags);
} catch (const std::system_error& e) {
caught = true;
VERIFY( e.code() == ec );