From 7de366a05d97d6bfa133ecc8a3cb17a595d3fe0c Mon Sep 17 00:00:00 2001 From: LRN Date: Fri, 17 Jan 2014 04:12:54 +0000 Subject: More W32 resolver workarounds --- src/util/gnunet-service-resolver.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/util') diff --git a/src/util/gnunet-service-resolver.c b/src/util/gnunet-service-resolver.c index f2cd52ddd..0392e0bf1 100644 --- a/src/util/gnunet-service-resolver.c +++ b/src/util/gnunet-service-resolver.c @@ -274,6 +274,22 @@ getaddrinfo_resolve (struct GNUNET_SERVER_TransmitContext *tc, struct addrinfo *result; struct addrinfo *pos; +#ifdef WINDOWS + /* Due to a bug, getaddrinfo will not return a mix of different families */ + if (AF_UNSPEC == af) + { + int ret1; + int ret2; + ret1 = getaddrinfo_resolve (tc, hostname, AF_INET); + ret2 = getaddrinfo_resolve (tc, hostname, AF_INET6); + if ((ret1 == GNUNET_OK) || (ret2 == GNUNET_OK)) + return GNUNET_OK; + if ((ret1 == GNUNET_SYSERR) || (ret2 == GNUNET_SYSERR)) + return GNUNET_SYSERR; + return GNUNET_NO; + } +#endif + memset (&hints, 0, sizeof (struct addrinfo)); hints.ai_family = af; hints.ai_socktype = SOCK_STREAM; /* go for TCP */ @@ -333,6 +349,11 @@ gethostbyname2_resolve (struct GNUNET_SERVER_TransmitContext *tc, int ret1; int ret2; +#ifdef WINDOWS + /* gethostbyname2() in plibc is a compat dummy that calls gethostbyname(). */ + return GNUNET_NO; +#endif + if (af == AF_UNSPEC) { ret1 = gethostbyname2_resolve (tc, hostname, AF_INET); -- cgit v1.2.3