aboutsummaryrefslogtreecommitdiff
path: root/src/util/gnunet-service-resolver.c
diff options
context:
space:
mode:
authorLRN <lrn1986@gmail.com>2014-01-17 04:12:54 +0000
committerLRN <lrn1986@gmail.com>2014-01-17 04:12:54 +0000
commit7de366a05d97d6bfa133ecc8a3cb17a595d3fe0c (patch)
tree3f66446f24cc8153dd9aa7146df72312bd907e04 /src/util/gnunet-service-resolver.c
parentb8bfbf5d0801afc80a8f44f9df7f8a1e95bb2bbc (diff)
downloadgnunet-7de366a05d97d6bfa133ecc8a3cb17a595d3fe0c.tar.gz
gnunet-7de366a05d97d6bfa133ecc8a3cb17a595d3fe0c.zip
More W32 resolver workarounds
Diffstat (limited to 'src/util/gnunet-service-resolver.c')
-rw-r--r--src/util/gnunet-service-resolver.c21
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);