예제 #1
0
파일: IPAddress.cpp 프로젝트: 191919/folly
// 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);
  }
}
예제 #2
0
파일: IPAddress.cpp 프로젝트: Orvid/folly
// public ipv6 constructor
IPAddress::IPAddress(const in6_addr& ipV6Addr) noexcept
    : addr_(IPAddressV6(ipV6Addr)), family_(AF_INET6) {}