26#ifndef MYSQL_HARNESS_NET_TS_INTERNET_H_
27#define MYSQL_HARNESS_NET_TS_INTERNET_H_
35#include <forward_list>
38#include <system_error>
47#include <netinet/in.h>
48#include <netinet/ip6.h>
49#include <netinet/tcp.h>
70 if (std::endian::native == std::endian::big)
return t;
83 if (std::endian::native == std::endian::big)
return t;
99 : array<unsigned char, 4>{{
static_cast<unsigned char>(t)...}} {}
117 return (
to_uint() & 0xff000000) == 0x7f000000;
120 return (
to_uint() & 0xf0000000) == 0xe0000000;
123 template <
class Allocator = std::allocator<
char>>
124 std::basic_string<char, std::char_traits<char>, Allocator>
to_string(
125 const Allocator &a = Allocator())
const {
126 std::basic_string<char, std::char_traits<char>, Allocator> out(a);
127 out.resize(INET_ADDRSTRLEN);
129 if (
nullptr != ::inet_ntop(AF_INET, &
addr_, &out.front(), out.size())) {
130 out.erase(out.find(
'\0'));
161 return a.to_uint() == b.to_uint();
167 return a.to_uint() < b.to_uint();
186 template <
class... T>
188 : array<unsigned char, 16>{{
static_cast<unsigned char>(t)...}} {}
202 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
203 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
211 return (
bytes_[0] == 0xfe) && (
bytes_[1] & 0xc0) == 0x80;
214 return (
bytes_[0] == 0xfe) && (
bytes_[1] & 0xc0) == 0xc0;
247 template <
class Allocator = std::allocator<
char>>
248 std::basic_string<char, std::char_traits<char>, Allocator>
to_string(
249 const Allocator &a = Allocator())
const {
250 std::basic_string<char, std::char_traits<char>, Allocator> out(a);
251 out.resize(INET6_ADDRSTRLEN);
254 ::inet_ntop(AF_INET6,
bytes_.data(), &out.front(), out.size())) {
255 out.erase(out.find(
'\0'));
280 auto const aa = a.to_bytes();
281 auto const bb = b.to_bytes();
285 for (; ndx != aa.size() && aa[ndx] == bb[ndx]; ++ndx)
288 return (ndx == aa.size()) ? a.scope_id() == b.scope_id() :
false;
294 auto const aa = a.to_bytes();
295 auto const bb = b.to_bytes();
299 for (; ndx != aa.size() && aa[ndx] == bb[ndx]; ++ndx)
302 return (ndx == aa.size()) ? a.scope_id() < b.scope_id() : aa[ndx] < bb[ndx];
315 return *
this == any();
318 return *
this == loopback();
323 constexpr address() noexcept : v4_{}, is_v4_{
true} {}
327 constexpr bool is_v4() const noexcept {
return is_v4_; }
328 constexpr bool is_v6() const noexcept {
return !is_v4_; }
347 return is_v4() ? v4_.is_unspecified() : v6_.is_unspecified();
350 return is_v4() ? v4_.is_loopback() : v6_.is_loopback();
353 return is_v4() ? v4_.is_multicast() : v6_.is_multicast();
361 template <
class Allocator = std::allocator<
char>>
362 std::basic_string<char, std::char_traits<char>, Allocator>
to_string(
363 const Allocator &a = Allocator())
const {
364 return is_v4() ? v4_.to_string(a) : v6_.to_string(a);
393 if (
const char *percent = strchr(
str,
'%')) {
394 const char *after_percent = percent + 1;
396 if (*after_percent ==
'\0' || *after_percent ==
'-' ||
397 *after_percent ==
'+') {
402 scope_id = ::strtoul(after_percent, &
err, 10);
407 std::string before_percent(
str, percent);
409 inet_pton_res = ::inet_pton(AF_INET6, before_percent.c_str(), &ipv6_addr);
411 inet_pton_res = ::inet_pton(AF_INET6,
str, &ipv6_addr);
413 if (inet_pton_res == 1) {
416 return ret_type{std::in_place, ipv6_addr, scope_id};
417 }
else if (inet_pton_res == 0) {
436 int res = ::inet_pton(AF_INET,
str, &ipv4_addr);
439 }
else if (res == 0) {
461 if (v4_res)
return address{*v4_res};
474 const std::string &
str) {
478template <
class CharT,
class Traits>
480 std::basic_ostream<CharT, Traits> &os,
const address &addr) {
481 os << addr.to_string().c_str();
487 if (a.is_v4() && b.is_v4())
return a.to_v4() == b.to_v4();
488 if (a.is_v6() && b.is_v6())
return a.to_v6() == b.to_v6();
499 if (a.is_v4() && !b.is_v4())
return true;
500 if (!a.is_v4() && b.is_v4())
return false;
503 if (a.is_v4())
return a.to_v4() < b.to_v4();
504 return a.to_v6() < b.to_v6();
512template <
typename InternetProtocol>
521 std::string service_name)
523 host_name_{
std::move(host_name)},
524 service_name_{
std::move(service_name)} {}
538template <
typename InternetProtocol>
541template <
typename InternetProtocol>
558 bool empty() const noexcept {
return results_.empty(); }
569 const std::string &host_name,
570 const std::string &service_name) {
573 auto tail = results_.before_begin();
574 for (
const auto *cur = ainfo.get(); cur !=
nullptr; cur = cur->ai_next) {
575 std::memcpy(ep.data(), cur->ai_addr, cur->ai_addrlen);
577 tail = results_.emplace_after(tail, ep, host_name, service_name);
583 const std::string &service_name) {
584 auto tail = results_.before_begin();
586 tail = results_.emplace_after(tail, ep, host_name, service_name);
598 static constexpr flags passive = AI_PASSIVE;
599 static constexpr flags canonical_name = AI_CANONNAME;
600 static constexpr flags numeric_host = AI_NUMERICHOST;
601 static constexpr flags numeric_service = AI_NUMERICSERV;
602 static constexpr flags v4_mapped = AI_V4MAPPED;
603 static constexpr flags all_matching = AI_ALL;
604 static constexpr flags address_configured = AI_ADDRCONFIG;
607template <
typename InternetProtocol>
619 const std::string &host_name,
const std::string &service_name,
flags f) {
623 hints.ai_family = AF_UNSPEC;
624 hints.ai_socktype = proto.type();
625 hints.ai_protocol = proto.protocol();
628 hints.ai_flags =
static_cast<decltype(hints.ai_flags)
>(f.to_ulong());
630 auto res = io_ctx_.socket_service()->getaddrinfo(
631 host_name.empty() ?
nullptr : host_name.c_str(),
632 service_name.empty() ?
nullptr : service_name.c_str(), &hints);
636 return results_type{std::move(res.value()), host_name, service_name};
639 const std::string &host_name,
const std::string &service_name) {
640 return resolve(host_name, service_name,
flags{});
644 std::array<char, NI_MAXHOST> host_name;
645 std::array<char, NI_MAXSERV> service_name;
647 int nameinfo_flags{0};
650 nameinfo_flags |= NI_DGRAM;
654 static_cast<const struct
sockaddr *
>(ep.data()), ep.size(),
655 host_name.data(), host_name.size(), service_name.data(),
656 service_name.size(), nameinfo_flags);
662 const auto name_end =
std::find(host_name.begin(), host_name.end(),
'\0');
663 const auto serv_end =
664 std::find(service_name.begin(), service_name.end(),
'\0');
668 std::string{host_name.
begin(), name_end},
669 std::string{service_name.begin(), serv_end},
677template <
typename InternetProtocol>
689 data_.v4.sin_family = protocol_type::v4().family();
701 data_.v4.sin_family =
decltype(data_.v4.sin_family)(proto.family());
711 data_.v4.sin_family = protocol_type::v4().family();
714 auto addr_b = addr.to_v4().to_bytes();
718 reinterpret_cast<unsigned char *
>(&data_.v4.sin_addr.s_addr));
721 data_.v6.sin6_family = protocol_type::v6().family();
724 auto addr_b = addr.to_v6().to_bytes();
725 std::copy(addr_b.begin(), addr_b.end(), data_.v6.sin6_addr.s6_addr);
727 data_.v6.sin6_scope_id = addr.to_v6().scope_id();
735 return data_.v4.sin_family == AF_INET ? protocol_type::v4()
736 : protocol_type::v6();
743 if (protocol().family() == protocol_type::v4().family())
748 std::copy(data_.v6.sin6_addr.s6_addr, data_.v6.sin6_addr.s6_addr + 16,
757 return data_.v4.sin_family == AF_INET ?
network_to_host(data_.v4.sin_port)
764 const void *
data() const noexcept {
return &data_; }
769 void *
data() noexcept {
return &data_; }
775 return data_.v4.sin_family == AF_INET ?
sizeof(sockaddr_in)
776 :
sizeof(sockaddr_in6);
782 constexpr size_t capacity() const noexcept {
return sizeof(data_); }
801 if (
n > capacity())
throw std::length_error(
"n > capacity()");
811template <
class CharT,
class Traits,
class InternetProtocol>
813 std::basic_ostream<CharT, Traits> &os,
814 const basic_endpoint<InternetProtocol> &ep) {
815 std::basic_ostringstream<CharT, Traits> ss;
816 if (ep.protocol() == basic_endpoint<InternetProtocol>::protocol_type::v6()) {
817 ss <<
"[" << ep.address() <<
"]";
821 ss <<
":" << ep.port();
830template <
class InternetProtocol>
833 return a.port() == b.port() && a.address() == b.address();
836template <
class InternetProtocol>
843template <
class Address>
881 return addr_ == rhs.addr_;
885 return addr_ != rhs.addr_;
929template <
class Address>
943 : begin_{first}, end_{last} {}
948 bool empty() const noexcept {
return begin_ == end_; }
949 size_t size() const noexcept {
return end_->to_uint() - begin_->to_uint(); }
952 if (*begin_ <= addr && addr < *end_)
return iterator{addr};
974 : addr_{addr}, prefix_len_{prefix_len} {}
977 auto m =
mask.to_uint();
978 uint32_t t{1U << 31U};
981 for (; sh < 32; ++sh) {
982 if ((m & t) == 0)
break;
998 v <<= 32U - prefix_len_;
1006 auto mask = netmask().to_uint();
1012 return {network(), prefix_length()};
1014 constexpr bool is_host() const noexcept {
return prefix_length() == 32; }
1015 constexpr bool is_subnet_of(
const network_v4 &other)
const noexcept;
1017 template <
class Allocator = std::allocator<
char>>
1018 std::basic_string<char, std::char_traits<char>, Allocator>
to_string(
1019 const Allocator &a = Allocator())
const {
1030 return a.address() == b.address() && a.prefix_length() == b.prefix_length();
1035 return other.prefix_length() < prefix_length() &&
1043template <
class CharT,
class Traits>
1044std::basic_ostream<CharT, Traits> &
operator<<(
1045 std::basic_ostream<CharT, Traits> &os,
const network_v4 &
net) {
1046 os <<
net.to_string().c_str();
1057 : addr_{addr}, prefix_len_{prefix_len} {}
1063 const auto address_bytes =
address().to_bytes();
1065 networkbits(address_bytes, prefix_len_, 0),
1066 networkbits(address_bytes, prefix_len_, 1),
1067 networkbits(address_bytes, prefix_len_, 2),
1068 networkbits(address_bytes, prefix_len_, 3),
1069 networkbits(address_bytes, prefix_len_, 4),
1070 networkbits(address_bytes, prefix_len_, 5),
1071 networkbits(address_bytes, prefix_len_, 6),
1072 networkbits(address_bytes, prefix_len_, 7),
1073 networkbits(address_bytes, prefix_len_, 8),
1074 networkbits(address_bytes, prefix_len_, 9),
1075 networkbits(address_bytes, prefix_len_, 10),
1076 networkbits(address_bytes, prefix_len_, 11),
1077 networkbits(address_bytes, prefix_len_, 12),
1078 networkbits(address_bytes, prefix_len_, 13),
1079 networkbits(address_bytes, prefix_len_, 14),
1080 networkbits(address_bytes, prefix_len_, 15),
1087 return {network(), prefix_length()};
1089 constexpr bool is_host() const noexcept {
return prefix_length() == 128; }
1090 constexpr bool is_subnet_of(
const network_v6 &other)
const noexcept;
1092 template <
class Allocator = std::allocator<
char>>
1093 std::basic_string<char, std::char_traits<char>, Allocator>
to_string(
1094 const Allocator &a = Allocator())
const {
1102 return address_bytes[ndx] & leftmostbits(ndx, prefix_len);
1106 int bitndx = ndx * 8;
1108 if (bitndx > prefix_len)
return 0;
1109 prefix_len -= bitndx;
1110 if (prefix_len >= 8)
return 0xff;
1112 return 0xff << (8 - prefix_len);
1121 return a.address() == b.address() && a.prefix_length() == b.prefix_length();
1126 return other.prefix_length() < prefix_length() &&
1134template <
class CharT,
class Traits>
1135std::basic_ostream<CharT, Traits> &
operator<<(
1136 std::basic_ostream<CharT, Traits> &os,
const network_v6 &
net) {
1137 os <<
net.to_string().c_str();
1162#ifdef TCP_CONGESTION
1170#ifdef TCP_DEFER_ACCEPT
1174#ifdef TCP_EXPEDITED_1122
1176 using expedited_rfc1122 =
1184#ifdef TCP_FASTOPEN_CONNECT
1186 using fast_open_connect =
1247#ifdef TCP_USER_TIMEOUT
1251#ifdef TCP_WINDOW_CLAMP
1255#ifdef TCP_TIMESTAMPS
1259#ifdef TCP_NOTSENT_LOWAT
1299 static constexpr tcp v4() noexcept {
return tcp{AF_INET}; }
1300 static constexpr tcp v6() noexcept {
return tcp{AF_INET6}; }
1302 constexpr int family() const noexcept {
return family_; }
1303 constexpr int type() const noexcept {
return SOCK_STREAM; }
1309 constexpr explicit tcp(
int family) : family_{family} {}
1315 return a.family() == b.family() && a.type() == b.type();
1330 static constexpr udp v4() noexcept {
return udp{AF_INET}; }
1331 static constexpr udp v6() noexcept {
return udp{AF_INET6}; }
1333 constexpr int family() const noexcept {
return family_; }
1334 constexpr int type() const noexcept {
return SOCK_DGRAM; }
1335 constexpr int protocol() const noexcept {
return IPPROTO_UDP; }
1340 constexpr explicit udp(
int family) : family_{family} {}
1348 return a.family() == b.family() && a.type() == b.type();
Kerberos Client Authentication nullptr
Definition: auth_kerberos_client_plugin.cc:251
Definition: socket.h:1293
Definition: socket.h:1090
Definition: io_context.h:991
Definition: io_context.h:61
Definition: internet.h:93
bytes_type addr_
Definition: internet.h:156
static constexpr address_v4 any() noexcept
Definition: internet.h:147
constexpr bool is_loopback() const noexcept
Definition: internet.h:116
constexpr address_v4(uint_type val)
Definition: internet.h:104
constexpr uint_type to_uint() const noexcept
Definition: internet.h:143
constexpr address_v4(const bytes_type &b)
Definition: internet.h:113
constexpr address_v4() noexcept
Definition: internet.h:103
uint_least32_t uint_type
Definition: internet.h:95
constexpr bool is_unspecified() const noexcept
Definition: internet.h:115
static constexpr address_v4 loopback() noexcept
Definition: internet.h:148
constexpr bool is_multicast() const noexcept
Definition: internet.h:119
std::basic_string< char, std::char_traits< char >, Allocator > to_string(const Allocator &a=Allocator()) const
Definition: internet.h:124
constexpr bytes_type to_bytes() const noexcept
Definition: internet.h:140
static constexpr address_v4 broadcast() noexcept
Definition: internet.h:151
IPv6 address with scope_id.
Definition: internet.h:182
constexpr bool is_multicast_site_local() const noexcept
Definition: internet.h:228
constexpr bool is_multicast_org_local() const noexcept
Definition: internet.h:231
constexpr bool is_multicast_link_local() const noexcept
Definition: internet.h:225
constexpr address_v6(const bytes_type &bytes, scope_id_type scope_id=0) noexcept
Definition: internet.h:192
constexpr bool is_v4_mapped() const noexcept
Definition: internet.h:216
constexpr address_v6() noexcept
Definition: internet.h:191
constexpr scope_id_type scope_id() const noexcept
Definition: internet.h:240
std::basic_string< char, std::char_traits< char >, Allocator > to_string(const Allocator &a=Allocator()) const
convert an address_v6 into a string.
Definition: internet.h:248
static constexpr address_v6 loopback()
Definition: internet.h:200
constexpr bool is_multicast() const noexcept
Definition: internet.h:209
constexpr bool is_loopback() const noexcept
Definition: internet.h:317
constexpr bytes_type to_bytes() const noexcept
Definition: internet.h:238
static constexpr address_v6 any()
Definition: internet.h:197
constexpr bool is_site_local() const noexcept
Definition: internet.h:213
constexpr bool is_unspecified() const noexcept
Definition: internet.h:314
constexpr bool is_multicast_node_local() const noexcept
Definition: internet.h:222
constexpr bool is_multicast_global() const noexcept
Definition: internet.h:234
bytes_type bytes_
Definition: internet.h:269
constexpr bool is_link_local() const noexcept
Definition: internet.h:210
scope_id_type scope_id_
Definition: internet.h:270
Definition: internet.h:321
constexpr address_v4 to_v4() const
get address_v4 part.
Definition: internet.h:335
constexpr bool is_v6() const noexcept
Definition: internet.h:328
constexpr bool is_multicast() const noexcept
Definition: internet.h:352
constexpr bool is_v4() const noexcept
Definition: internet.h:327
bool is_v4_
Definition: internet.h:373
address_v6 v6_
Definition: internet.h:370
constexpr address(const address_v4 &a) noexcept
Definition: internet.h:324
constexpr address() noexcept
Definition: internet.h:323
constexpr address_v6 to_v6() const
get address_v6 part.
Definition: internet.h:343
std::basic_string< char, std::char_traits< char >, Allocator > to_string(const Allocator &a=Allocator()) const
convert an address into a string.
Definition: internet.h:362
constexpr bool is_unspecified() const noexcept
Definition: internet.h:346
constexpr bool is_loopback() const noexcept
Definition: internet.h:349
address_v4 v4_
Definition: internet.h:369
constexpr address(const address_v6 &a) noexcept
Definition: internet.h:325
Definition: internet.h:273
bad_address_cast() noexcept=default
Definition: internet.h:847
basic_address_iterator operator--(int) noexcept
Definition: internet.h:874
basic_address_iterator & operator++() noexcept
Definition: internet.h:859
basic_address_iterator & operator--() noexcept
Definition: internet.h:869
basic_address_iterator(const value_type &a) noexcept
Definition: internet.h:855
std::input_iterator_tag iterator_category
Definition: internet.h:853
ptrdiff_t difference_type
Definition: internet.h:850
bool operator==(const basic_address_iterator &rhs) const noexcept
Definition: internet.h:880
bool operator!=(const basic_address_iterator &rhs) const noexcept
Definition: internet.h:884
basic_address_iterator operator++(int) noexcept
Definition: internet.h:864
reference operator*() const noexcept
Definition: internet.h:857
pointer operator->() const noexcept
Definition: internet.h:858
value_type addr_
Definition: internet.h:889
Definition: internet.h:893
pointer operator->() const noexcept
Definition: internet.h:904
value_type addr_
Definition: internet.h:921
basic_address_iterator & operator++() noexcept
reference operator*() const noexcept
Definition: internet.h:903
basic_address_iterator(const value_type &a) noexcept
Definition: internet.h:901
basic_address_iterator & operator--() noexcept
std::input_iterator_tag iterator_category
Definition: internet.h:899
ptrdiff_t difference_type
Definition: internet.h:896
Definition: internet.h:844
Definition: internet.h:936
iterator find(const value_type &addr) const noexcept
Definition: internet.h:951
basic_address_range(const value_type &first, const value_type &last) noexcept
Definition: internet.h:942
basic_address_range() noexcept
Definition: internet.h:941
size_t size() const noexcept
Definition: internet.h:949
bool empty() const noexcept
Definition: internet.h:948
iterator end_
Definition: internet.h:959
iterator begin_
Definition: internet.h:958
iterator begin() const noexcept
Definition: internet.h:945
iterator end() const noexcept
Definition: internet.h:946
Definition: internet.h:963
Definition: internet.h:930
Definition: internet.h:678
const void * data() const noexcept
const pointer to the underlying sockaddr.
Definition: internet.h:764
size_t size_type
Definition: internet.h:681
constexpr size_type size() const noexcept
size of the underlying sockaddr.
Definition: internet.h:774
constexpr basic_endpoint(const protocol_type &proto, port_type port_num) noexcept
construct from protocol and port-number.
Definition: internet.h:697
void resize(size_type n)
set the size of valid data of the underlying sockaddr.
Definition: internet.h:800
void * data() noexcept
pointer to the underlying sockaddr.
Definition: internet.h:769
constexpr size_t capacity() const noexcept
get capacity of the underlying sockaddr.
Definition: internet.h:782
constexpr basic_endpoint(const ip::address &addr, port_type port_num) noexcept
construct from address and port-number.
Definition: internet.h:708
constexpr protocol_type protocol() const noexcept
get protocol of the endpoint.
Definition: internet.h:734
InternetProtocol protocol_type
Definition: internet.h:680
sockaddr_in v4
Definition: internet.h:806
constexpr basic_endpoint()
default constructor.
Definition: internet.h:688
sockaddr_in6 v6
Definition: internet.h:807
constexpr ip::address address() const noexcept
get address of the endpoint.
Definition: internet.h:742
constexpr port_type port() const noexcept
get port of the endpoint.
Definition: internet.h:756
endpoint of IPv4/IPv6 based connection.
Definition: internet.h:513
basic_resolver_entry(const endpoint_type &ep, std::string host_name, std::string service_name)
Definition: internet.h:520
std::string host_name() const
Definition: internet.h:528
basic_resolver_entry()=default
endpoint_type ep_
Definition: internet.h:532
typename protocol_type::endpoint endpoint_type
Definition: internet.h:516
endpoint_type endpoint() const
Definition: internet.h:526
std::string host_name_
Definition: internet.h:533
std::string service_name_
Definition: internet.h:534
InternetProtocol protocol_type
Definition: internet.h:515
std::string service_name() const
Definition: internet.h:529
Definition: internet.h:542
const_iterator iterator
Definition: internet.h:550
typename protocol_type::endpoint endpoint_type
Definition: internet.h:545
InternetProtocol protocol_type
Definition: internet.h:544
size_type max_size() const noexcept
Definition: internet.h:557
const_iterator cbegin() const
Definition: internet.h:562
basic_resolver_results(std::unique_ptr< addrinfo, void(*)(addrinfo *)> ainfo, const std::string &host_name, const std::string &service_name)
Definition: internet.h:568
ptrdiff_t difference_type
Definition: internet.h:551
std::forward_list< value_type > results_
Definition: internet.h:590
basic_resolver_results(const endpoint_type &ep, const std::string &host_name, const std::string &service_name)
Definition: internet.h:582
typename std::forward_list< value_type >::const_iterator const_iterator
Definition: internet.h:549
bool empty() const noexcept
Definition: internet.h:558
const_iterator begin() const
Definition: internet.h:560
const_iterator end() const
Definition: internet.h:561
basic_resolver_results()=default
size_type size() const noexcept
Definition: internet.h:556
size_t size_type
Definition: internet.h:552
Definition: internet.h:608
stdx::expected< results_type, error_type > resolve(const endpoint_type &ep)
Definition: internet.h:643
typename InternetProtocol::endpoint endpoint_type
Definition: internet.h:612
InternetProtocol protocol_type
Definition: internet.h:611
impl::socket::error_type error_type
Definition: internet.h:614
stdx::expected< results_type, error_type > resolve(const std::string &host_name, const std::string &service_name)
Definition: internet.h:638
basic_resolver(io_context &io_ctx)
Definition: internet.h:616
io_context & io_ctx_
Definition: internet.h:674
stdx::expected< results_type, error_type > resolve(const std::string &host_name, const std::string &service_name, flags f)
Definition: internet.h:618
Definition: internet.h:970
constexpr bool is_subnet_of(const network_v4 &other) const noexcept
Definition: internet.h:1033
constexpr address_v4 network() const noexcept
Definition: internet.h:1002
constexpr int prefix_length() const noexcept
Definition: internet.h:994
constexpr network_v4(const address_v4 &addr, const address_v4 &mask)
Definition: internet.h:975
constexpr address_v4 broadcast() const noexcept
Definition: internet.h:1005
constexpr address_v4 netmask() const noexcept
Definition: internet.h:995
address_v4_range hosts() const noexcept
constexpr network_v4 canonical() const noexcept
Definition: internet.h:1011
constexpr network_v4() noexcept=default
std::basic_string< char, std::char_traits< char >, Allocator > to_string(const Allocator &a=Allocator()) const
Definition: internet.h:1018
constexpr bool is_host() const noexcept
Definition: internet.h:1014
constexpr address_v4 address() const noexcept
Definition: internet.h:993
Definition: internet.h:1053
address_v6_range hosts() const noexcept
constexpr unsigned char networkbits(const address_v6::bytes_type &address_bytes, int prefix_len, int ndx) const
Definition: internet.h:1099
constexpr address_v6 network() const noexcept
Definition: internet.h:1062
std::basic_string< char, std::char_traits< char >, Allocator > to_string(const Allocator &a=Allocator()) const
Definition: internet.h:1093
constexpr bool is_host() const noexcept
Definition: internet.h:1089
constexpr network_v6 canonical() const noexcept
Definition: internet.h:1086
constexpr uint8_t leftmostbits(int ndx, int prefix_len) const
Definition: internet.h:1105
constexpr int prefix_length() const noexcept
Definition: internet.h:1061
constexpr bool is_subnet_of(const network_v6 &other) const noexcept
Definition: internet.h:1124
constexpr network_v6() noexcept=default
constexpr address_v6 address() const noexcept
Definition: internet.h:1060
Definition: internet.h:594
std::bitset< 32 > flags
Definition: internet.h:596
TCP protocol.
Definition: internet.h:1155
static constexpr tcp v4() noexcept
Definition: internet.h:1299
constexpr int protocol() const noexcept
Definition: internet.h:1304
int family_
Definition: internet.h:1311
constexpr int family() const noexcept
Definition: internet.h:1302
constexpr int type() const noexcept
Definition: internet.h:1303
constexpr tcp(int family)
Definition: internet.h:1309
static constexpr tcp v6() noexcept
Definition: internet.h:1300
Definition: internet.h:1324
int family_
Definition: internet.h:1342
constexpr int protocol() const noexcept
Definition: internet.h:1335
constexpr int family() const noexcept
Definition: internet.h:1333
constexpr int type() const noexcept
Definition: internet.h:1334
static constexpr udp v4() noexcept
Definition: internet.h:1330
constexpr udp(int family)
Definition: internet.h:1340
static constexpr udp v6() noexcept
Definition: internet.h:1331
base-class of socket options.
Definition: socket.h:77
Definition: expected.h:286
static std::string to_string(const LEX_STRING &str)
Definition: lex_string.h:50
static mi_bit_type mask[]
Definition: mi_packrec.cc:141
void copy(Shards< COUNT > &dst, const Shards< COUNT > &src) noexcept
Copy the counters, overwrite destination.
Definition: ut0counter.h:354
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1105
Container::const_iterator find(const Container &c, Value &&value)
Definition: generic.h:39
static Value err()
Create a Value object that represents an error condition.
Definition: json_binary.cc:908
stdx::expected< void, std::error_code > getnameinfo(const struct sockaddr *saddr, socklen_t addrlen, char *host, socklen_t hostlen, char *serv, socklen_t servlen, int flags)
Definition: resolver.h:173
std::error_code last_error_code()
get last std::error_code for socket-errors.
Definition: socket_error.h:107
std::error_code error_type
Definition: socket_constants.h:55
constexpr bool operator>=(const address_v4 &a, const address_v4 &b) noexcept
Definition: internet.h:175
stdx::expected< address, std::error_code > make_address(const char *str)
make address from a c-string.
Definition: internet.h:454
stdx::expected< address_v6, std::error_code > make_address_v6(const char *str)
make address_v6 from a string.
Definition: internet.h:383
constexpr bool operator==(const address_v4 &a, const address_v4 &b) noexcept
Definition: internet.h:160
constexpr T host_to_network(const T t) noexcept
convert an integer from host-endianness into network endianness.
Definition: internet.h:68
constexpr bool operator<(const address_v4 &a, const address_v4 &b) noexcept
Definition: internet.h:166
stdx::expected< address_v4, std::error_code > make_address_v4(const char *str)
make address_v4 from a string.
Definition: internet.h:432
uint_least32_t scope_id_type
Definition: internet.h:91
constexpr bool operator<=(const address_v4 &a, const address_v4 &b) noexcept
Definition: internet.h:172
constexpr T network_to_host(const T t) noexcept
convert an integer from network-endianness into host endianness.
Definition: internet.h:81
std::basic_ostream< CharT, Traits > & operator<<(std::basic_ostream< CharT, Traits > &os, const address &addr)
Definition: internet.h:479
constexpr bool operator>(const address_v4 &a, const address_v4 &b) noexcept
Definition: internet.h:169
uint_least16_t port_type
Definition: internet.h:90
constexpr bool operator!=(const address_v4 &a, const address_v4 &b) noexcept
Definition: internet.h:163
std::error_code make_error_code(resolver_errc ec)
Definition: resolver.h:135
Definition: gcs_xcom_synode.h:64
unexpected(E) -> unexpected< E >
constexpr T byteswap(T num) noexcept
Definition: bit.h:52
std::conditional_t< !std::is_array< T >::value, std::unique_ptr< T, detail::Deleter< T > >, std::conditional_t< detail::is_unbounded_array_v< T >, std::unique_ptr< T, detail::Array_deleter< std::remove_extent_t< T > > >, void > > unique_ptr
The following is a common type that is returned by all the ut::make_unique (non-aligned) specializati...
Definition: ut0new.h:2440
required string type
Definition: replication_group_member_actions.proto:34
struct sockaddr sockaddr
Definition: sock_probe_win32.h:63
Definition: internet.h:96
constexpr bytes_type(T... t)
Definition: internet.h:98
Definition: internet.h:184
constexpr bytes_type(T... t)
Definition: internet.h:187
#define IPPROTO_TCP
Definition: task_os.h:87
int n
Definition: xcom_base.cc:509