net/SocketAddress: add GetSteadyPart()

This commit is contained in:
Max Kellermann
2018-08-21 10:57:46 +02:00
parent ba3b422ce5
commit ede7434901
2 changed files with 48 additions and 0 deletions

View File

@@ -107,4 +107,41 @@ SocketAddress::GetPort() const noexcept
}
}
static constexpr ConstBuffer<void>
GetSteadyPart(const struct sockaddr_in &address) noexcept
{
return {&address.sin_addr, sizeof(address.sin_addr)};
}
static constexpr ConstBuffer<void>
GetSteadyPart(const struct sockaddr_in6 &address) noexcept
{
return {&address.sin6_addr, sizeof(address.sin6_addr)};
}
#endif
ConstBuffer<void>
SocketAddress::GetSteadyPart() const noexcept
{
if (IsNull())
return nullptr;
switch (GetFamily()) {
#ifdef HAVE_UN
case AF_LOCAL:
return GetLocalRaw().ToVoid();
#endif
#ifdef HAVE_TCP
case AF_INET:
return ::GetSteadyPart(*(const struct sockaddr_in *)(const void *)GetAddress());
case AF_INET6:
return ::GetSteadyPart(*(const struct sockaddr_in6 *)(const void *)GetAddress());
#endif
default:
return nullptr;
}
}