diff options
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/gnunet-service-resolver.c | 21 |
1 files changed, 21 insertions, 0 deletions
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, | |||
274 | struct addrinfo *result; | 274 | struct addrinfo *result; |
275 | struct addrinfo *pos; | 275 | struct addrinfo *pos; |
276 | 276 | ||
277 | #ifdef WINDOWS | ||
278 | /* Due to a bug, getaddrinfo will not return a mix of different families */ | ||
279 | if (AF_UNSPEC == af) | ||
280 | { | ||
281 | int ret1; | ||
282 | int ret2; | ||
283 | ret1 = getaddrinfo_resolve (tc, hostname, AF_INET); | ||
284 | ret2 = getaddrinfo_resolve (tc, hostname, AF_INET6); | ||
285 | if ((ret1 == GNUNET_OK) || (ret2 == GNUNET_OK)) | ||
286 | return GNUNET_OK; | ||
287 | if ((ret1 == GNUNET_SYSERR) || (ret2 == GNUNET_SYSERR)) | ||
288 | return GNUNET_SYSERR; | ||
289 | return GNUNET_NO; | ||
290 | } | ||
291 | #endif | ||
292 | |||
277 | memset (&hints, 0, sizeof (struct addrinfo)); | 293 | memset (&hints, 0, sizeof (struct addrinfo)); |
278 | hints.ai_family = af; | 294 | hints.ai_family = af; |
279 | hints.ai_socktype = SOCK_STREAM; /* go for TCP */ | 295 | hints.ai_socktype = SOCK_STREAM; /* go for TCP */ |
@@ -333,6 +349,11 @@ gethostbyname2_resolve (struct GNUNET_SERVER_TransmitContext *tc, | |||
333 | int ret1; | 349 | int ret1; |
334 | int ret2; | 350 | int ret2; |
335 | 351 | ||
352 | #ifdef WINDOWS | ||
353 | /* gethostbyname2() in plibc is a compat dummy that calls gethostbyname(). */ | ||
354 | return GNUNET_NO; | ||
355 | #endif | ||
356 | |||
336 | if (af == AF_UNSPEC) | 357 | if (af == AF_UNSPEC) |
337 | { | 358 | { |
338 | ret1 = gethostbyname2_resolve (tc, hostname, AF_INET); | 359 | ret1 = gethostbyname2_resolve (tc, hostname, AF_INET); |