]> git.proxmox.com Git - mirror_qemu.git/commitdiff
sockets: add ability to disable DNS resolution for InetSocketAddress
authorDaniel P. Berrange <berrange@redhat.com>
Tue, 19 Jul 2016 11:58:52 +0000 (12:58 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Mon, 23 Jan 2017 15:32:17 +0000 (15:32 +0000)
Add a 'numeric' flag to the InetSocketAddress struct to allow the
caller to indicate that DNS should be skipped for the host/port
fields. This is useful if the caller knows the address is already
numeric and wants to guarantee no (potentially blocking) DNS
lookups are attempted.

Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
qapi-schema.json
util/qemu-sockets.c

index ddc878390e7a7c99a7acc9044bec1d1460ef0547..ac55f4a41bec08486c15bca0061ef0fe2d466392 100644 (file)
 #
 # @port: port part of the address, or lowest port if @to is present
 #
+# @numeric: #optional true if the host/port are guaranteed to be numeric,
+#           false if name resolution should be attempted. Defaults to false.
+#           (Since 2.9)
+#
 # @to: highest port to try
 #
 # @ipv4: whether to accept IPv4 addresses, default try both IPv4 and IPv6
   'data': {
     'host': 'str',
     'port': 'str',
+    '*numeric':  'bool',
     '*to': 'uint16',
     '*ipv4': 'bool',
     '*ipv6': 'bool' } }
index fe1d07aaefd75bbb31cc6cd8b5aeea7e7ab473e1..b6d99cbf42c4e86e95909954e9e4430c3fe6d42f 100644 (file)
 # define AI_V4MAPPED 0
 #endif
 
+#ifndef AI_NUMERICSERV
+# define AI_NUMERICSERV 0
+#endif
+
 
 static int inet_getport(struct addrinfo *e)
 {
@@ -141,6 +145,9 @@ static int inet_listen_saddr(InetSocketAddress *saddr,
 
     memset(&ai,0, sizeof(ai));
     ai.ai_flags = AI_PASSIVE;
+    if (saddr->has_numeric && saddr->numeric) {
+        ai.ai_flags |= AI_NUMERICHOST | AI_NUMERICSERV;
+    }
     ai.ai_family = inet_ai_family_from_address(saddr, &err);
     ai.ai_socktype = SOCK_STREAM;