ClickHouse/dbms/src/Common/DNSResolver.h

50 lines
1.2 KiB
C++
Raw Normal View History

#pragma once
#include <Poco/Net/IPAddress.h>
#include <Poco/Net/SocketAddress.h>
#include <memory>
#include <ext/singleton.h>
#include <Core/Types.h>
namespace DB
{
2018-04-19 13:56:14 +00:00
/// A singleton implementing DNS names resolving with optional permanent DNS cache
/// The cache could be updated only manually via drop() method
class DNSResolver : public ext::singleton<DNSResolver>
{
public:
2018-04-19 13:56:14 +00:00
DNSResolver(const DNSResolver &) = delete;
/// Accepts host names like 'example.com' or '127.0.0.1' or '::1' and resolve its IP
Poco::Net::IPAddress resolveHost(const std::string & host);
/// Accepts host names like 'example.com:port' or '127.0.0.1:port' or '[::1]:port' and resolve its IP and port
Poco::Net::SocketAddress resolveAddress(const std::string & host_and_port);
Poco::Net::SocketAddress resolveAddress(const std::string & host, UInt16 port);
/// Get this server host name
String getHostName();
/// Disables caching
2018-04-19 13:56:14 +00:00
void setDisableCacheFlag(bool is_disabled = true);
/// Drops all caches
2018-04-19 13:56:14 +00:00
void dropCache();
2018-04-19 13:56:14 +00:00
~DNSResolver();
protected:
2018-04-19 13:56:14 +00:00
DNSResolver();
2018-04-19 13:56:14 +00:00
friend class ext::singleton<DNSResolver>;
struct Impl;
std::unique_ptr<Impl> impl;
};
}