summaryrefslogtreecommitdiff
path: root/source/Host/common/SocketAddress.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-04-26 19:24:53 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-04-26 19:24:53 +0000
commit5060b64b7d79491d507a75201be161fd0c38fcbb (patch)
treef4791d04b99ac52da01e646e5a6c9ce22ade61b9 /source/Host/common/SocketAddress.cpp
parentd44a35e87e405ae98902dc491ba70ed82f58f592 (diff)
Notes
Diffstat (limited to 'source/Host/common/SocketAddress.cpp')
-rw-r--r--source/Host/common/SocketAddress.cpp32
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) {