--- /dev/null
+From dea9f9c5d03983bb6a9c75f093b2f9c49e4a5397 Mon Sep 17 00:00:00 2001
+From: Wolfgang Bumiller <w.bumiller@proxmox.com>
+Date: Thu, 21 May 2015 10:48:21 +0200
+Subject: [PATCH] friendlier ai_flag hints for ipv6 hosts
+
+*) Do not use AI_ADDRCONFIG on listening sockets, because this flag
+makes it impossible to explicitly listen on '127.0.0.1' if no global
+ipv4 address is configured additionally, making this a very
+uncomfortable option.
+*) Add AI_V4MAPPED hint for connecting sockets for a similar purpose.
+
+If your system is globally only connected via ipv6 you still want to be
+able to use '127.0.0.1' and 'localhost'.
+Specifically, PVE - unless explicitly asking for insecure mode - uses
+loopback addresses with QEMU for live migrations tunneled over SSH.
+These fail to start because AI_ADDRCONFIG makes getaddrinfo refuse to
+work with '127.0.0.1'.
+
+As for the AI_V4MAPPED flag the situation is similar.
+
+I also want to point out that glibc explicitly sidesteps POSIX standards
+when passing 0 as hints by then assuming both AI_V4MAPPED and
+AI_ADDRCONFIG (the latter being a rather weird choice IMO), while
+according to POSIX.1-2001 it should be assumed 0. (glibc considers its
+choice an improvement.)
+Since either AI_CANONNAME or AI_PASSIVE are passed in our cases, glibc's
+default flags in turn are disabled again unless explicitly added, which
+I do with this patch.
+---
+ util/qemu-sockets.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
+index 6b97dc1..f99b013 100644
+--- a/util/qemu-sockets.c
++++ b/util/qemu-sockets.c
+@@ -114,7 +114,7 @@ int inet_listen_opts(QemuOpts *opts, int port_offset, Error **errp)
+ int slisten, rc, to, port_min, port_max, p;
+
+ memset(&ai,0, sizeof(ai));
+- ai.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;
++ ai.ai_flags = AI_PASSIVE;
+ ai.ai_family = PF_UNSPEC;
+ ai.ai_socktype = SOCK_STREAM;
+
+@@ -308,7 +308,7 @@ static struct addrinfo *inet_parse_connect_opts(QemuOpts *opts, Error **errp)
+
+ memset(&ai, 0, sizeof(ai));
+
+- ai.ai_flags = AI_CANONNAME | AI_ADDRCONFIG;
++ ai.ai_flags = AI_CANONNAME | AI_V4MAPPED | AI_ADDRCONFIG;
+ ai.ai_family = PF_UNSPEC;
+ ai.ai_socktype = SOCK_STREAM;
+
+@@ -404,7 +404,7 @@ int inet_dgram_opts(QemuOpts *opts, Error **errp)
+
+ /* lookup peer addr */
+ memset(&ai,0, sizeof(ai));
+- ai.ai_flags = AI_CANONNAME | AI_ADDRCONFIG;
++ ai.ai_flags = AI_CANONNAME | AI_V4MAPPED | AI_ADDRCONFIG;
+ ai.ai_family = PF_UNSPEC;
+ ai.ai_socktype = SOCK_DGRAM;
+
+--
+2.1.4
+