25#ifndef MYSQL_HARNESS_NET_TS_INTERNET_H_
26#define MYSQL_HARNESS_NET_TS_INTERNET_H_
33#include <forward_list>
36#include <system_error>
45#include <netinet/in.h>
46#include <netinet/ip6.h>
47#include <netinet/tcp.h>
98 : array<unsigned char, 4>{{
static_cast<unsigned char>(t)...}} {}
116 return (
to_uint() & 0xff000000) == 0x7f000000;
119 return (
to_uint() & 0xf0000000) == 0xe0000000;
122 template <
class Allocator = std::allocator<
char>>
123 std::basic_string<char, std::char_traits<char>, Allocator>
to_string(
124 const Allocator &a = Allocator())
const {
125 std::basic_string<char, std::char_traits<char>, Allocator> out(a);
126 out.resize(INET_ADDRSTRLEN);
128 if (
nullptr != ::inet_ntop(AF_INET, &
addr_, &out.front(), out.size())) {
129 out.erase(out.find(
'\0'));
160 return a.to_uint() == b.to_uint();
166 return a.to_uint() < b.to_uint();
185 template <
class... T>
187 : array<unsigned char, 16>{{
static_cast<unsigned char>(t)...}} {}
201 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
202 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
210 return (
bytes_[0] == 0xfe) && (
bytes_[1] & 0xc0) == 0x80;
213 return (
bytes_[0] == 0xfe) && (
bytes_[1] & 0xc0) == 0xc0;
246 template <
class Allocator = std::allocator<
char>>
247 std::basic_string<char, std::char_traits<char>, Allocator>
to_string(
248 const Allocator &a = Allocator())
const {
249 std::basic_string<char, std::char_traits<char>, Allocator> out(a);
250 out.resize(INET6_ADDRSTRLEN);
253 ::inet_ntop(AF_INET6,
bytes_.data(), &out.front(), out.size())) {
254 out.erase(out.find(
'\0'));
279 auto const aa = a.to_bytes();
280 auto const bb = b.to_bytes();
284 for (; ndx != aa.size() && aa[ndx] == bb[ndx]; ++ndx)
287 return (ndx == aa.size()) ? a.scope_id() == b.scope_id() :
false;
293 auto const aa = a.to_bytes();
294 auto const bb = b.to_bytes();
298 for (; ndx != aa.size() && aa[ndx] == bb[ndx]; ++ndx)
301 return (ndx == aa.size()) ? a.scope_id() < b.scope_id() : aa[ndx] < bb[ndx];
314 return *
this == any();
317 return *
this == loopback();
322 constexpr address() noexcept : v4_{}, is_v4_{
true} {}
326 constexpr bool is_v4() const noexcept {
return is_v4_; }
327 constexpr bool is_v6() const noexcept {
return !is_v4_; }
346 return is_v4() ? v4_.is_unspecified() : v6_.is_unspecified();
349 return is_v4() ? v4_.is_loopback() : v6_.is_loopback();
352 return is_v4() ? v4_.is_multicast() : v6_.is_multicast();
360 template <
class Allocator = std::allocator<
char>>
361 std::basic_string<char, std::char_traits<char>, Allocator>
to_string(
362 const Allocator &a = Allocator())
const {
363 return is_v4() ? v4_.to_string(a) : v6_.to_string(a);
392 if (
const char *percent = strchr(
str,
'%')) {
393 const char *after_percent = percent + 1;
395 if (*after_percent ==
'\0' || *after_percent ==
'-' ||
396 *after_percent ==
'+') {
402 scope_id = ::strtoul(after_percent, &
err, 10);
408 std::string before_percent(
str, percent);
410 inet_pton_res = ::inet_pton(AF_INET6, before_percent.c_str(), &ipv6_addr);
412 inet_pton_res = ::inet_pton(AF_INET6,
str, &ipv6_addr);
414 if (inet_pton_res == 1) {
415 return {std::in_place, ipv6_addr, scope_id};
416 }
else if (inet_pton_res == 0) {
435 int res = ::inet_pton(AF_INET,
str, &ipv4_addr);
438 }
else if (res == 0) {
460 if (v4_res)
return address{*v4_res};
473 const std::string &
str) {
477template <
class CharT,
class Traits>
479 std::basic_ostream<CharT, Traits> &os,
const address &addr) {
480 os << addr.to_string().c_str();
486 if (a.is_v4() && b.is_v4())
return a.to_v4() == b.to_v4();
487 if (a.is_v6() && b.is_v6())
return a.to_v6() == b.to_v6();
498 if (a.is_v4() && !b.is_v4())
return true;
499 if (!a.is_v4() && b.is_v4())
return false;
502 if (a.is_v4())
return a.to_v4() < b.to_v4();
503 return a.to_v6() < b.to_v6();
511template <
typename InternetProtocol>
520 std::string service_name)
522 host_name_{
std::move(host_name)},
523 service_name_{
std::move(service_name)} {}
537template <
typename InternetProtocol>
540template <
typename InternetProtocol>
557 bool empty() const noexcept {
return results_.empty(); }
568 const std::string &host_name,
569 const std::string &service_name) {
572 auto tail = results_.before_begin();
573 for (
const auto *cur = ainfo.get(); cur !=
nullptr; cur = cur->ai_next) {
574 std::memcpy(ep.data(), cur->ai_addr, cur->ai_addrlen);
576 tail = results_.emplace_after(tail, ep, host_name, service_name);
582 const std::string &service_name) {
583 auto tail = results_.before_begin();
585 tail = results_.emplace_after(tail, ep, host_name, service_name);
597 static constexpr flags passive = AI_PASSIVE;
598 static constexpr flags canonical_name = AI_CANONNAME;
599 static constexpr flags numeric_host = AI_NUMERICHOST;
600 static constexpr flags numeric_service = AI_NUMERICSERV;
601 static constexpr flags v4_mapped = AI_V4MAPPED;
602 static constexpr flags all_matching = AI_ALL;
603 static constexpr flags address_configured = AI_ADDRCONFIG;
606template <
typename InternetProtocol>
618 const std::string &host_name,
const std::string &service_name,
flags f) {
622 hints.ai_family = AF_UNSPEC;
623 hints.ai_socktype = proto.type();
624 hints.ai_protocol = proto.protocol();
627 hints.ai_flags =
static_cast<decltype(hints.ai_flags)
>(f.to_ulong());
629 auto res = io_ctx_.socket_service()->getaddrinfo(
630 host_name.empty() ?
nullptr : host_name.c_str(),
631 service_name.empty() ?
nullptr : service_name.c_str(), &hints);
635 return results_type{std::move(res.value()), host_name, service_name};
638 const std::string &host_name,
const std::string &service_name) {
639 return resolve(host_name, service_name,
flags{});
643 std::array<char, NI_MAXHOST> host_name;
644 std::array<char, NI_MAXSERV> service_name;
653 static_cast<const struct
sockaddr *
>(ep.data()), ep.size(),
654 host_name.data(), host_name.size(), service_name.data(),
655 service_name.size(),
flags);
661 const auto name_end =
std::find(host_name.begin(), host_name.end(),
'\0');
662 const auto serv_end =
663 std::find(service_name.begin(), service_name.end(),
'\0');
667 std::string{host_name.
begin(), name_end},
668 std::string{service_name.begin(), serv_end},
676template <
typename InternetProtocol>
688 data_.v4.sin_family = protocol_type::v4().family();
700 data_.v4.sin_family =
decltype(data_.v4.sin_family)(proto.family());
710 data_.v4.sin_family = protocol_type::v4().family();
713 auto addr_b = addr.to_v4().to_bytes();
716 std::copy(addr_b.begin(), addr_b.end(),
717 reinterpret_cast<unsigned char *
>(&data_.v4.sin_addr.s_addr));
720 data_.v6.sin6_family = protocol_type::v6().family();
723 auto addr_b = addr.to_v6().to_bytes();
724 std::copy(addr_b.begin(), addr_b.end(), data_.v6.sin6_addr.s6_addr);
726 data_.v6.sin6_scope_id = addr.to_v6().scope_id();
734 return data_.v4.sin_family == AF_INET ? protocol_type::v4()
735 : protocol_type::v6();
742 if (protocol().family() == protocol_type::v4().family())
747 std::copy(data_.v6.sin6_addr.s6_addr, data_.v6.sin6_addr.s6_addr + 16,
756 return data_.v4.sin_family == AF_INET ?
network_to_host(data_.v4.sin_port)
763 const void *
data() const noexcept {
return &data_; }
768 void *
data() noexcept {
return &data_; }
774 return data_.v4.sin_family == AF_INET ?
sizeof(sockaddr_in)
775 :
sizeof(sockaddr_in6);
781 constexpr size_t capacity() const noexcept {
return sizeof(data_); }
800 if (
n > capacity())
throw std::length_error(
"n > capacity()");
810template <
class CharT,
class Traits,
class InternetProtocol>
812 std::basic_ostream<CharT, Traits> &os,
813 const basic_endpoint<InternetProtocol> &ep) {
814 std::basic_ostringstream<CharT, Traits> ss;
815 if (ep.protocol() == basic_endpoint<InternetProtocol>::protocol_type::v6()) {
816 ss <<
"[" << ep.address() <<
"]";
820 ss <<
":" << ep.port();
829template <
class InternetProtocol>
832 return a.port() == b.port() && a.address() == b.address();
835template <
class InternetProtocol>
842template <
class Address>
880 return addr_ == rhs.addr_;
884 return addr_ != rhs.addr_;
928template <
class Address>
942 : begin_{first}, end_{
last} {}
947 bool empty() const noexcept {
return begin_ == end_; }
948 size_t size() const noexcept {
return end_->to_uint() - begin_->to_uint(); }
951 if (*begin_ <= addr && addr < *end_)
return iterator{addr};
973 : addr_{addr}, prefix_len_{prefix_len} {}
976 auto m =
mask.to_uint();
977 uint32_t t{1U << 31U};
980 for (; sh < 32; ++sh) {
981 if ((m & t) == 0)
break;
997 v <<= 32U - prefix_len_;
1005 auto mask = netmask().to_uint();
1011 return {network(), prefix_length()};
1013 constexpr bool is_host() const noexcept {
return prefix_length() == 32; }
1014 constexpr bool is_subnet_of(
const network_v4 &other)
const noexcept;
1016 template <
class Allocator = std::allocator<
char>>
1017 std::basic_string<char, std::char_traits<char>, Allocator>
to_string(
1018 const Allocator &a = Allocator())
const {
1029 return a.address() == b.address() && a.prefix_length() == b.prefix_length();
1034 return other.prefix_length() < prefix_length() &&
1042template <
class CharT,
class Traits>
1043std::basic_ostream<CharT, Traits> &
operator<<(
1044 std::basic_ostream<CharT, Traits> &os,
const network_v4 &
net) {
1045 os <<
net.to_string().c_str();
1056 : addr_{addr}, prefix_len_{prefix_len} {}
1062 const auto address_bytes =
address().to_bytes();
1064 networkbits(address_bytes, prefix_len_, 0),
1065 networkbits(address_bytes, prefix_len_, 1),
1066 networkbits(address_bytes, prefix_len_, 2),
1067 networkbits(address_bytes, prefix_len_, 3),
1068 networkbits(address_bytes, prefix_len_, 4),
1069 networkbits(address_bytes, prefix_len_, 5),
1070 networkbits(address_bytes, prefix_len_, 6),
1071 networkbits(address_bytes, prefix_len_, 7),
1072 networkbits(address_bytes, prefix_len_, 8),
1073 networkbits(address_bytes, prefix_len_, 9),
1074 networkbits(address_bytes, prefix_len_, 10),
1075 networkbits(address_bytes, prefix_len_, 11),
1076 networkbits(address_bytes, prefix_len_, 12),
1077 networkbits(address_bytes, prefix_len_, 13),
1078 networkbits(address_bytes, prefix_len_, 14),
1079 networkbits(address_bytes, prefix_len_, 15),
1086 return {network(), prefix_length()};
1088 constexpr bool is_host() const noexcept {
return prefix_length() == 128; }
1089 constexpr bool is_subnet_of(
const network_v6 &other)
const noexcept;
1091 template <
class Allocator = std::allocator<
char>>
1092 std::basic_string<char, std::char_traits<char>, Allocator>
to_string(
1093 const Allocator &a = Allocator())
const {
1101 return address_bytes[ndx] & leftmostbits(ndx, prefix_len);
1105 int bitndx = ndx * 8;
1107 if (bitndx > prefix_len)
return 0;
1108 prefix_len -= bitndx;
1109 if (prefix_len >= 8)
return 0xff;
1111 return 0xff << (8 - prefix_len);
1120 return a.address() == b.address() && a.prefix_length() == b.prefix_length();
1125 return other.prefix_length() < prefix_length() &&
1133template <
class CharT,
class Traits>
1134std::basic_ostream<CharT, Traits> &
operator<<(
1135 std::basic_ostream<CharT, Traits> &os,
const network_v6 &
net) {
1136 os <<
net.to_string().c_str();
1161#ifdef TCP_CONGESTION
1169#ifdef TCP_DEFER_ACCEPT
1173#ifdef TCP_EXPEDITED_1122
1175 using expedited_rfc1122 =
1183#ifdef TCP_FASTOPEN_CONNECT
1185 using fast_open_connect =
1246#ifdef TCP_USER_TIMEOUT
1250#ifdef TCP_WINDOW_CLAMP
1254#ifdef TCP_TIMESTAMPS
1258#ifdef TCP_NOTSENT_LOWAT
1298 static constexpr tcp v4() noexcept {
return tcp{AF_INET}; }
1299 static constexpr tcp v6() noexcept {
return tcp{AF_INET6}; }
1301 constexpr int family() const noexcept {
return family_; }
1302 constexpr int type() const noexcept {
return SOCK_STREAM; }
1308 constexpr explicit tcp(
int family) : family_{family} {}
1314 return a.family() == b.family() && a.type() == b.type();
1329 static constexpr udp v4() noexcept {
return udp{AF_INET}; }
1330 static constexpr udp v6() noexcept {
return udp{AF_INET6}; }
1332 constexpr int family() const noexcept {
return family_; }
1333 constexpr int type() const noexcept {
return SOCK_DGRAM; }
1334 constexpr int protocol() const noexcept {
return IPPROTO_UDP; }
1339 constexpr explicit udp(
int family) : family_{family} {}
1347 return a.family() == b.family() && a.type() == b.type();
Kerberos Client Authentication nullptr
Definition: auth_kerberos_client_plugin.cc:250
Definition: socket.h:1292
Definition: socket.h:1089
Definition: io_context.h:989
Definition: io_context.h:60
Definition: internet.h:92
bytes_type addr_
Definition: internet.h:155
static constexpr address_v4 any() noexcept
Definition: internet.h:146
constexpr bool is_loopback() const noexcept
Definition: internet.h:115
constexpr address_v4(uint_type val)
Definition: internet.h:103
constexpr uint_type to_uint() const noexcept
Definition: internet.h:142
constexpr address_v4(const bytes_type &b)
Definition: internet.h:112
constexpr address_v4() noexcept
Definition: internet.h:102
uint_least32_t uint_type
Definition: internet.h:94
constexpr bool is_unspecified() const noexcept
Definition: internet.h:114
static constexpr address_v4 loopback() noexcept
Definition: internet.h:147
constexpr bool is_multicast() const noexcept
Definition: internet.h:118
std::basic_string< char, std::char_traits< char >, Allocator > to_string(const Allocator &a=Allocator()) const
Definition: internet.h:123
constexpr bytes_type to_bytes() const noexcept
Definition: internet.h:139
static constexpr address_v4 broadcast() noexcept
Definition: internet.h:150
IPv6 address with scope_id.
Definition: internet.h:181
constexpr bool is_multicast_site_local() const noexcept
Definition: internet.h:227
constexpr bool is_multicast_org_local() const noexcept
Definition: internet.h:230
constexpr bool is_multicast_link_local() const noexcept
Definition: internet.h:224
constexpr address_v6(const bytes_type &bytes, scope_id_type scope_id=0) noexcept
Definition: internet.h:191
constexpr bool is_v4_mapped() const noexcept
Definition: internet.h:215
constexpr address_v6() noexcept
Definition: internet.h:190
constexpr scope_id_type scope_id() const noexcept
Definition: internet.h:239
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:247
static constexpr address_v6 loopback()
Definition: internet.h:199
constexpr bool is_multicast() const noexcept
Definition: internet.h:208
constexpr bool is_loopback() const noexcept
Definition: internet.h:316
constexpr bytes_type to_bytes() const noexcept
Definition: internet.h:237
static constexpr address_v6 any()
Definition: internet.h:196
constexpr bool is_site_local() const noexcept
Definition: internet.h:212
constexpr bool is_unspecified() const noexcept
Definition: internet.h:313
constexpr bool is_multicast_node_local() const noexcept
Definition: internet.h:221
constexpr bool is_multicast_global() const noexcept
Definition: internet.h:233
bytes_type bytes_
Definition: internet.h:268
constexpr bool is_link_local() const noexcept
Definition: internet.h:209
scope_id_type scope_id_
Definition: internet.h:269
Definition: internet.h:320
constexpr address_v4 to_v4() const
get address_v4 part.
Definition: internet.h:334
constexpr bool is_v6() const noexcept
Definition: internet.h:327
constexpr bool is_multicast() const noexcept
Definition: internet.h:351
constexpr bool is_v4() const noexcept
Definition: internet.h:326
bool is_v4_
Definition: internet.h:372
address_v6 v6_
Definition: internet.h:369
constexpr address(const address_v4 &a) noexcept
Definition: internet.h:323
constexpr address() noexcept
Definition: internet.h:322
constexpr address_v6 to_v6() const
get address_v6 part.
Definition: internet.h:342
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:361
constexpr bool is_unspecified() const noexcept
Definition: internet.h:345
constexpr bool is_loopback() const noexcept
Definition: internet.h:348
address_v4 v4_
Definition: internet.h:368
constexpr address(const address_v6 &a) noexcept
Definition: internet.h:324
Definition: internet.h:272
bad_address_cast() noexcept=default
Definition: internet.h:846
basic_address_iterator operator--(int) noexcept
Definition: internet.h:873
basic_address_iterator & operator++() noexcept
Definition: internet.h:858
basic_address_iterator & operator--() noexcept
Definition: internet.h:868
basic_address_iterator(const value_type &a) noexcept
Definition: internet.h:854
std::input_iterator_tag iterator_category
Definition: internet.h:852
ptrdiff_t difference_type
Definition: internet.h:849
bool operator==(const basic_address_iterator &rhs) const noexcept
Definition: internet.h:879
bool operator!=(const basic_address_iterator &rhs) const noexcept
Definition: internet.h:883
basic_address_iterator operator++(int) noexcept
Definition: internet.h:863
reference operator*() const noexcept
Definition: internet.h:856
pointer operator->() const noexcept
Definition: internet.h:857
value_type addr_
Definition: internet.h:888
Definition: internet.h:892
pointer operator->() const noexcept
Definition: internet.h:903
value_type addr_
Definition: internet.h:920
basic_address_iterator & operator++() noexcept
reference operator*() const noexcept
Definition: internet.h:902
basic_address_iterator(const value_type &a) noexcept
Definition: internet.h:900
basic_address_iterator & operator--() noexcept
std::input_iterator_tag iterator_category
Definition: internet.h:898
ptrdiff_t difference_type
Definition: internet.h:895
Definition: internet.h:843
Definition: internet.h:935
iterator find(const value_type &addr) const noexcept
Definition: internet.h:950
basic_address_range(const value_type &first, const value_type &last) noexcept
Definition: internet.h:941
basic_address_range() noexcept
Definition: internet.h:940
size_t size() const noexcept
Definition: internet.h:948
bool empty() const noexcept
Definition: internet.h:947
iterator end_
Definition: internet.h:958
iterator begin_
Definition: internet.h:957
iterator begin() const noexcept
Definition: internet.h:944
iterator end() const noexcept
Definition: internet.h:945
Definition: internet.h:962
Definition: internet.h:929
Definition: internet.h:677
const void * data() const noexcept
const pointer to the underlying sockaddr.
Definition: internet.h:763
size_t size_type
Definition: internet.h:680
constexpr size_type size() const noexcept
size of the underlying sockaddr.
Definition: internet.h:773
constexpr basic_endpoint(const protocol_type &proto, port_type port_num) noexcept
construct from protocol and port-number.
Definition: internet.h:696
void resize(size_type n)
set the size of valid data of the underlying sockaddr.
Definition: internet.h:799
void * data() noexcept
pointer to the underlying sockaddr.
Definition: internet.h:768
constexpr size_t capacity() const noexcept
get capacity of the underlying sockaddr.
Definition: internet.h:781
constexpr basic_endpoint(const ip::address &addr, port_type port_num) noexcept
construct from address and port-number.
Definition: internet.h:707
constexpr protocol_type protocol() const noexcept
get protocol of the endpoint.
Definition: internet.h:733
InternetProtocol protocol_type
Definition: internet.h:679
sockaddr_in v4
Definition: internet.h:805
constexpr basic_endpoint()
default constructor.
Definition: internet.h:687
sockaddr_in6 v6
Definition: internet.h:806
constexpr ip::address address() const noexcept
get address of the endpoint.
Definition: internet.h:741
constexpr port_type port() const noexcept
get port of the endpoint.
Definition: internet.h:755
endpoint of IPv4/IPv6 based connection.
Definition: internet.h:512
basic_resolver_entry(const endpoint_type &ep, std::string host_name, std::string service_name)
Definition: internet.h:519
std::string host_name() const
Definition: internet.h:527
basic_resolver_entry()=default
endpoint_type ep_
Definition: internet.h:531
typename protocol_type::endpoint endpoint_type
Definition: internet.h:515
endpoint_type endpoint() const
Definition: internet.h:525
std::string host_name_
Definition: internet.h:532
std::string service_name_
Definition: internet.h:533
InternetProtocol protocol_type
Definition: internet.h:514
std::string service_name() const
Definition: internet.h:528
Definition: internet.h:541
const_iterator iterator
Definition: internet.h:549
typename protocol_type::endpoint endpoint_type
Definition: internet.h:544
InternetProtocol protocol_type
Definition: internet.h:543
size_type max_size() const noexcept
Definition: internet.h:556
const_iterator cbegin() const
Definition: internet.h:561
basic_resolver_results(std::unique_ptr< addrinfo, void(*)(addrinfo *)> ainfo, const std::string &host_name, const std::string &service_name)
Definition: internet.h:567
ptrdiff_t difference_type
Definition: internet.h:550
std::forward_list< value_type > results_
Definition: internet.h:589
basic_resolver_results(const endpoint_type &ep, const std::string &host_name, const std::string &service_name)
Definition: internet.h:581
typename std::forward_list< value_type >::const_iterator const_iterator
Definition: internet.h:548
bool empty() const noexcept
Definition: internet.h:557
const_iterator begin() const
Definition: internet.h:559
const_iterator end() const
Definition: internet.h:560
basic_resolver_results()=default
size_type size() const noexcept
Definition: internet.h:555
size_t size_type
Definition: internet.h:551
Definition: internet.h:607
stdx::expected< results_type, error_type > resolve(const endpoint_type &ep)
Definition: internet.h:642
typename InternetProtocol::endpoint endpoint_type
Definition: internet.h:611
InternetProtocol protocol_type
Definition: internet.h:610
impl::socket::error_type error_type
Definition: internet.h:613
stdx::expected< results_type, error_type > resolve(const std::string &host_name, const std::string &service_name)
Definition: internet.h:637
basic_resolver(io_context &io_ctx)
Definition: internet.h:615
io_context & io_ctx_
Definition: internet.h:673
stdx::expected< results_type, error_type > resolve(const std::string &host_name, const std::string &service_name, flags f)
Definition: internet.h:617
Definition: internet.h:969
constexpr bool is_subnet_of(const network_v4 &other) const noexcept
Definition: internet.h:1032
constexpr address_v4 network() const noexcept
Definition: internet.h:1001
constexpr int prefix_length() const noexcept
Definition: internet.h:993
constexpr network_v4(const address_v4 &addr, const address_v4 &mask)
Definition: internet.h:974
constexpr address_v4 broadcast() const noexcept
Definition: internet.h:1004
constexpr address_v4 netmask() const noexcept
Definition: internet.h:994
address_v4_range hosts() const noexcept
constexpr network_v4 canonical() const noexcept
Definition: internet.h:1010
constexpr network_v4() noexcept=default
std::basic_string< char, std::char_traits< char >, Allocator > to_string(const Allocator &a=Allocator()) const
Definition: internet.h:1017
constexpr bool is_host() const noexcept
Definition: internet.h:1013
constexpr address_v4 address() const noexcept
Definition: internet.h:992
Definition: internet.h:1052
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:1098
constexpr address_v6 network() const noexcept
Definition: internet.h:1061
std::basic_string< char, std::char_traits< char >, Allocator > to_string(const Allocator &a=Allocator()) const
Definition: internet.h:1092
constexpr bool is_host() const noexcept
Definition: internet.h:1088
constexpr network_v6 canonical() const noexcept
Definition: internet.h:1085
constexpr uint8_t leftmostbits(int ndx, int prefix_len) const
Definition: internet.h:1104
constexpr int prefix_length() const noexcept
Definition: internet.h:1060
constexpr bool is_subnet_of(const network_v6 &other) const noexcept
Definition: internet.h:1123
constexpr network_v6() noexcept=default
constexpr address_v6 address() const noexcept
Definition: internet.h:1059
Definition: internet.h:593
std::bitset< 32 > flags
Definition: internet.h:595
TCP protocol.
Definition: internet.h:1154
static constexpr tcp v4() noexcept
Definition: internet.h:1298
constexpr int protocol() const noexcept
Definition: internet.h:1303
int family_
Definition: internet.h:1310
constexpr int family() const noexcept
Definition: internet.h:1301
constexpr int type() const noexcept
Definition: internet.h:1302
constexpr tcp(int family)
Definition: internet.h:1308
static constexpr tcp v6() noexcept
Definition: internet.h:1299
Definition: internet.h:1323
int family_
Definition: internet.h:1341
constexpr int protocol() const noexcept
Definition: internet.h:1334
constexpr int family() const noexcept
Definition: internet.h:1332
constexpr int type() const noexcept
Definition: internet.h:1333
static constexpr udp v4() noexcept
Definition: internet.h:1329
constexpr udp(int family)
Definition: internet.h:1339
static constexpr udp v6() noexcept
Definition: internet.h:1330
base-class of socket options.
Definition: socket.h:76
Definition: expected.h:943
static std::string to_string(const LEX_STRING &str)
Definition: lex_string.h:49
static mi_bit_type mask[]
Definition: mi_packrec.cc:140
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1085
const byte * find(const Pages *pages, const page_id_t &page_id) noexcept
Find a doublewrite copy of a page.
Definition: buf0dblwr.cc:3578
static Value err()
Create a Value object that represents an error condition.
Definition: json_binary.cc:921
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:172
std::error_code last_error_code()
get last std::error_code for socket-errors.
Definition: socket_error.h:106
std::error_code error_type
Definition: socket_constants.h:54
constexpr bool operator>=(const address_v4 &a, const address_v4 &b) noexcept
Definition: internet.h:174
stdx::expected< address, std::error_code > make_address(const char *str)
make address from a c-string.
Definition: internet.h:453
stdx::expected< address_v6, std::error_code > make_address_v6(const char *str)
make address_v6 from a string.
Definition: internet.h:382
constexpr bool operator==(const address_v4 &a, const address_v4 &b) noexcept
Definition: internet.h:159
constexpr T host_to_network(const T t) noexcept
convert an integer from host-endianness into network endianness.
Definition: internet.h:67
constexpr bool operator<(const address_v4 &a, const address_v4 &b) noexcept
Definition: internet.h:165
stdx::expected< address_v4, std::error_code > make_address_v4(const char *str)
make address_v4 from a string.
Definition: internet.h:431
uint_least32_t scope_id_type
Definition: internet.h:90
constexpr bool operator<=(const address_v4 &a, const address_v4 &b) noexcept
Definition: internet.h:171
constexpr T network_to_host(const T t) noexcept
convert an integer from network-endianness into host endianness.
Definition: internet.h:80
std::basic_ostream< CharT, Traits > & operator<<(std::basic_ostream< CharT, Traits > &os, const address &addr)
Definition: internet.h:478
constexpr bool operator>(const address_v4 &a, const address_v4 &b) noexcept
Definition: internet.h:168
uint_least16_t port_type
Definition: internet.h:89
constexpr bool operator!=(const address_v4 &a, const address_v4 &b) noexcept
Definition: internet.h:162
std::error_code make_error_code(resolver_errc ec)
Definition: resolver.h:134
Definition: varlen_sort.h:183
constexpr auto make_unexpected(E &&e) -> unexpected< std::decay_t< E > >
Definition: expected.h:124
constexpr std::enable_if_t< std::is_integral< IntegerType >::value, IntegerType > byteswap(IntegerType t) noexcept
Definition: bit.h:141
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:2437
required string type
Definition: replication_group_member_actions.proto:33
struct sockaddr sockaddr
Definition: sock_probe_win32.h:62
Definition: internet.h:95
constexpr bytes_type(T... t)
Definition: internet.h:97
Definition: internet.h:183
constexpr bytes_type(T... t)
Definition: internet.h:186
#define IPPROTO_TCP
Definition: task_os.h:86
int n
Definition: xcom_base.cc:508