diff options
Diffstat (limited to 'source/Host/common/SocketAddress.cpp')
| -rw-r--r-- | source/Host/common/SocketAddress.cpp | 32 | 
1 files changed, 13 insertions, 19 deletions
diff --git a/source/Host/common/SocketAddress.cpp b/source/Host/common/SocketAddress.cpp index 48c3ec1c48ed..b41cef6ca2eb 100644 --- a/source/Host/common/SocketAddress.cpp +++ b/source/Host/common/SocketAddress.cpp @@ -227,6 +227,18 @@ bool SocketAddress::getaddrinfo(const char *host, const char *service,                                  int ai_flags) {    Clear(); +  auto addresses = GetAddressInfo(host, service, ai_family, ai_socktype, ai_protocol, ai_flags); +  if (!addresses.empty()) +    *this = addresses[0]; +  return IsValid(); +} + +std::vector<SocketAddress> +SocketAddress::GetAddressInfo(const char *hostname, const char *servname, +                              int ai_family, int ai_socktype, int ai_protocol, +                              int ai_flags) { +  std::vector<SocketAddress> addr_list; +    struct addrinfo hints;    memset(&hints, 0, sizeof(hints));    hints.ai_family = ai_family; @@ -234,26 +246,8 @@ bool SocketAddress::getaddrinfo(const char *host, const char *service,    hints.ai_protocol = ai_protocol;    hints.ai_flags = ai_flags; -  bool result = false; -  struct addrinfo *service_info_list = NULL; -  int err = ::getaddrinfo(host, service, &hints, &service_info_list); -  if (err == 0 && service_info_list) { -    *this = service_info_list; -    result = IsValid(); -  } - -  if (service_info_list) -    ::freeaddrinfo(service_info_list); - -  return result; -} - -std::vector<SocketAddress> SocketAddress::GetAddressInfo(const char *hostname, -                                                       const char *servname) { -  std::vector<SocketAddress> addr_list; -    struct addrinfo *service_info_list = NULL; -  int err = ::getaddrinfo(hostname, servname, NULL, &service_info_list); +  int err = ::getaddrinfo(hostname, servname, &hints, &service_info_list);    if (err == 0 && service_info_list) {      for (struct addrinfo *service_ptr = service_info_list; service_ptr != NULL;           service_ptr = service_ptr->ai_next) {  | 
