about summary refs log tree commit diff
path: root/sysdeps/posix
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/posix')
-rw-r--r--sysdeps/posix/getaddrinfo.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
index f43aa03d1f..7217e5de3e 100644
--- a/sysdeps/posix/getaddrinfo.c
+++ b/sysdeps/posix/getaddrinfo.c
@@ -383,6 +383,14 @@ gaih_inet (const char *name, const struct gaih_service *service,
 
       memset (at->next, 0, sizeof(struct gaih_addrtuple));
       at->next->family = AF_INET;
+
+      if (!(req->ai_flags & AI_PASSIVE))
+	{
+	  /* RFC 2553 requires to set set the socket address structure
+	     to the loopback address in this case.  */
+	  memcpy (at->addr, &in6addr_loopback, sizeof (struct in6_addr));
+	  ((struct in_addr *)at->next->addr)->s_addr = htonl (INADDR_LOOPBACK);
+	}
     }
 
   if (pai == NULL)