Пример #1
0
INETSockAddr::INETSockAddr (const char* hostname, int port)
    {
    TRACE_CALL;
    (void) ::memset (addr_in(), 0, size ());
    sin_port = htons (port);
    setAddr (hostname);		// sets sin_family
    }
Пример #2
0
INETSockAddr::INETSockAddr (unsigned long address, int port)
    {
    TRACE_CALL;
    (void) ::memset (addr_in(), 0, size ());
    sin_family      = PF_INET;
    sin_addr.s_addr = htonl (address);
    sin_port        = htons (port);
    }
Пример #3
0
int Address::compare(const Address& a) const {
  if (family() != a.family()) {
    return family() < a.family() ? -1 : 1;
  }
  if (family() == AF_INET) {
    if (addr_in()->sin_addr.s_addr != a.addr_in()->sin_addr.s_addr) {
      return addr_in()->sin_addr.s_addr < a.addr_in()->sin_addr.s_addr ? -1 : 1;
    }
  } else if (family() == AF_INET6) {
    return memcmp(&(addr_in6()->sin6_addr), &(a.addr_in6()->sin6_addr),
                  sizeof(addr_in6()->sin6_addr));
  } else {
    assert(false);
    return -1;
  }
  return 0;
}
Пример #4
0
INETSockAddr::INETSockAddr (int port)
    {
    TRACE_CALL;
    (void) ::memset (addr_in(), 0, size ());
    sin_family      = PF_INET;
    sin_addr.s_addr = htonl(INADDR_ANY);
    sin_port        = htons (port);
    }
Пример #5
0
uint8_t Address::to_inet(uint8_t* data) const {
  if (family() == AF_INET) {
    memcpy(data, &addr_in()->sin_addr, 4);
    return 4;
  } else {
    memcpy(data, &addr_in6()->sin6_addr, 16);
    return 16;
  }
}
Пример #6
0
int Address::port() const {
  if (family() == AF_INET) {
    return htons(addr_in()->sin_port);
  } else if (family() == AF_INET6) {
    return htons(addr_in6()->sin6_port);
  } else {
    assert(false);
    return -1;
  }
}
Пример #7
0
int
INETSockAddr::clone (sockaddr*& buf) const
    {
    TRACE_CALL;

    buf = 0;

    sockaddr_in* sin_addr = new sockaddr_in (*addr_in ());

    if (sin_addr)
	buf = reinterpret_cast<sockaddr*> (sin_addr);

    return buf ? 0 : -1;
    }
Пример #8
0
std::string Address::to_string(bool with_port) const {
  std::stringstream ss;
  char host[INET6_ADDRSTRLEN + 1] = {'\0'};
  if (family() == AF_INET) {
    uv_ip4_name(const_cast<struct sockaddr_in*>(addr_in()), host,
                INET_ADDRSTRLEN);
    ss << host;
    if (with_port) ss << ":" << port();
  } else if (family() == AF_INET6) {
    uv_ip6_name(const_cast<struct sockaddr_in6*>(addr_in6()), host,
                INET6_ADDRSTRLEN);
    if (with_port) ss << "[";
    ss << host;
    if (with_port) ss << "]:" << port();
  } else {
    assert(false);
  }
  return ss.str();
}
Пример #9
0
sockaddr*
INETSockAddr::addr ()
    {
    TRACE_CALL;
    return reinterpret_cast<sockaddr*> (addr_in());
    }