17 : fSocketAddress_{iaddr}
21 : fSocketAddress_V4_{iaddr}
25 : fSocketAddress_V6_{iaddr}
29 : fSocketAddressStorage_{iaddr}
34 switch (iaddr.GetAddressFamily ()) {
35 case InternetAddress::AddressFamily::V4: {
36 fSocketAddress_V4_ = sockaddr_in{};
37 fSocketAddress_V4_.sin_family = AF_INET;
38 DISABLE_COMPILER_CLANG_WARNING_START (
"clang diagnostic ignored \"-Wdeprecated\"");
39 fSocketAddress_V4_.sin_port = htons (portNumber);
40 DISABLE_COMPILER_CLANG_WARNING_END (
"clang diagnostic ignored \"-Wdeprecated\"");
41 fSocketAddress_V4_.sin_addr = iaddr.As<in_addr> ();
43 case InternetAddress::AddressFamily::V6: {
44 fSocketAddress_V6_ = sockaddr_in6{};
45 fSocketAddress_V6_.sin6_family = AF_INET6;
46 DISABLE_COMPILER_CLANG_WARNING_START (
"clang diagnostic ignored \"-Wdeprecated\"");
47 fSocketAddress_V6_.sin6_port = htons (portNumber);
48 DISABLE_COMPILER_CLANG_WARNING_END (
"clang diagnostic ignored \"-Wdeprecated\"");
49 fSocketAddress_V6_.sin6_addr = iaddr.As<in6_addr> ();
53 fSocketAddress_ = sockaddr{};
59 return fSocketAddress_.sa_family == AF_UNSPEC;
63 fSocketAddress_ = sockaddr{};
64 Assert (fSocketAddress_.sa_family == AF_UNSPEC);
68 return static_cast<FamilyType> (fSocketAddress_.sa_family);
72 switch (fSocketAddress_.sa_family) {
74 return sizeof (fSocketAddress_V4_);
77 return sizeof (fSocketAddress_V6_);
83 return sizeof (fSocketAddressStorage_);
89 return fSocketAddress_.sa_family == AF_INET or fSocketAddress_.sa_family == AF_INET6;
94 switch (fSocketAddress_.sa_family) {
110 switch (fSocketAddress_.sa_family) {
112 DISABLE_COMPILER_CLANG_WARNING_START (
"clang diagnostic ignored \"-Wdeprecated\"");
113 return ntohs (fSocketAddress_V4_.sin_port);
114 DISABLE_COMPILER_CLANG_WARNING_END (
"clang diagnostic ignored \"-Wdeprecated\"");
117 DISABLE_COMPILER_CLANG_WARNING_START (
"clang diagnostic ignored \"-Wdeprecated\"");
118 return ntohs (fSocketAddress_V6_.sin6_port);
119 DISABLE_COMPILER_CLANG_WARNING_END (
"clang diagnostic ignored \"-Wdeprecated\"");
128 inline sockaddr SocketAddress::As<sockaddr> ()
const
130 Require (fSocketAddress_.sa_family == AF_INET or fSocketAddress_.sa_family == AF_UNSPEC);
131 return fSocketAddress_;
134 inline sockaddr_storage SocketAddress::As<sockaddr_storage> ()
const
136 return fSocketAddressStorage_;
139 inline sockaddr_in SocketAddress::As<sockaddr_in> ()
const
141 Require (fSocketAddress_.sa_family == AF_INET or fSocketAddress_.sa_family == AF_UNSPEC);
142 return fSocketAddress_V4_;
145 inline sockaddr_in6 SocketAddress::As<sockaddr_in6> ()
const
147 Require (fSocketAddress_.sa_family == AF_INET6 or fSocketAddress_.sa_family == AF_UNSPEC);
148 return fSocketAddress_V6_;
158 Require (fm == SocketAddress::INET or fm == SocketAddress::INET6);
159 if (fm == SocketAddress::INET) {
160 return V4::kLocalhost;
162 if (fm == SocketAddress::INET6) {
163 return V6::kLocalhost;
165 return V4::kLocalhost;
#define AssertNotReached()
constexpr SocketAddress() noexcept
nonvirtual PortType GetPort() const
nonvirtual size_t GetRequiredSize() const
nonvirtual InternetAddress GetInternetAddress() const
FamilyType
Socket address family - also sometimes referred to as domain (argument to ::socket calls it domain)
nonvirtual bool empty() const
nonvirtual bool IsInternetAddress() const
nonvirtual FamilyType GetAddressFamily() const
constexpr InternetAddress LocalHost(SocketAddress::FamilyType fm)
return V4::kLocalhost or V6::kLocalhost depending on argument address family