// 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); } }
// public ipv6 constructor IPAddress::IPAddress(const in6_addr& ipV6Addr) noexcept : addr_(IPAddressV6(ipV6Addr)), family_(AF_INET6) {}