// public sockaddr constructor IPAddress::IPAddress(const sockaddr* addr) : addr_(), family_(AF_UNSPEC) { if (addr == nullptr) { throw IPAddressFormatException("sockaddr == nullptr"); } family_ = addr->sa_family; switch (addr->sa_family) { case AF_INET: { const sockaddr_in* v4addr = reinterpret_cast<const sockaddr_in*>(addr); addr_.ipV4Addr = IPAddressV4(v4addr->sin_addr); break; } case AF_INET6: { const sockaddr_in6* v6addr = reinterpret_cast<const sockaddr_in6*>(addr); addr_.ipV6Addr = IPAddressV6(*v6addr); break; } default: throw InvalidAddressFamilyException(addr->sa_family); } }
[[noreturn]] void IPAddress::asV6Throw() const { auto fam = detail::familyNameStr(family()); throw InvalidAddressFamilyException( sformat("Can't convert address with family {} to AF_INET6 address", fam)); }
[[noreturn]] void IPAddress::asV6Throw() const { auto fam = detail::familyNameStr(family()); throw InvalidAddressFamilyException(to<std::string>( "Can't convert address with family ", fam, " to AF_INET6 address")); }