9#include <boost/asio/io_context.hpp>
10#include <boost/asio/ip/address.hpp>
11#include <boost/asio/ip/tcp.hpp>
12#include <boost/asio/ip/udp.hpp>
22template <
typename Protocol,
typename EndPo
intType>
26template <
typename Protocol>
31 explicit EndPoint(boost::asio::ip::basic_endpoint<Protocol> ep)
32 : _endpoint(
std::move(ep)) {}
36 return _endpoint.address();
41 return _endpoint.port();
45 operator boost::asio::ip::basic_endpoint<Protocol>()
const {
51 boost::asio::ip::basic_endpoint<Protocol>
_endpoint;
55template <
typename Protocol>
60 explicit EndPoint(uint16_t port) : _port(port) {}
68 operator boost::asio::ip::basic_endpoint<Protocol>()
const {
69 return {Protocol::v4(), _port};
81 return boost::asio::ip::make_address(
"127.0.0.1");
86 boost::asio::io_context io_context;
87 boost::asio::ip::tcp::resolver resolver(io_context);
89 boost::asio::ip::tcp::resolver::query query(boost::asio::ip::tcp::v4(), address,
"", boost::asio::ip::tcp::resolver::query::canonical_name);
90 boost::asio::ip::tcp::resolver::iterator iter = resolver.resolve(query);
91 boost::asio::ip::tcp::resolver::iterator
end;
94 boost::asio::ip::tcp::endpoint endpoint = *iter++;
95 return endpoint.address();
97 return boost::asio::ip::make_address(address);
101template <
typename Protocol>
102static inline auto make_endpoint(boost::asio::ip::basic_endpoint<Protocol> ep) {
107template <
typename Protocol>
109 return make_endpoint<Protocol>({
make_address(address), port});
113template <
typename Protocol>
114static inline auto make_endpoint(
const std::string &address, uint16_t port) {
115 return make_endpoint<Protocol>(address.c_str(), port);
119template <
typename Protocol>
auto end() const noexcept
EndPoint(boost::asio::ip::basic_endpoint< Protocol > ep)
boost::asio::ip::basic_endpoint< Protocol > _endpoint
static auto make_address(const std::string &address)
static auto make_localhost_address()
static auto make_endpoint(boost::asio::ip::basic_endpoint< Protocol > ep)