On 01/05/2017 10:03 AM, Daniel P. Berrange wrote: > 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. > > Signed-off-by: Daniel P. Berrange <berra...@redhat.com> > --- > qapi-schema.json | 5 +++++ > util/qemu-sockets.c | 3 +++ > 2 files changed, 8 insertions(+) > > diff --git a/qapi-schema.json b/qapi-schema.json > index a0d3b5d..d605c1e 100644 > --- a/qapi-schema.json > +++ b/qapi-schema.json > @@ -3070,6 +3070,10 @@ > # > # @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.8
2.9, actually. I'm also not sure if Marc-Andre's work requires () brackets around the since designation on a per-member listing. > @@ -3084,6 +3088,7 @@ > 'data': { > 'host': 'str', > 'port': 'str', > + 'numeric': 'bool', In order to be optional, it must be spelled '*numeric'. > '*to': 'uint16', > '*ipv4': 'bool', > '*ipv6': 'bool' } } Thinking out loud: Do we even need a 'numeric' field? If we could create an alternate type that distinguishes between a 'str' (name, DNS resolution required) and an 'int' (numeric, skip DNS), then we don't need a field. Except that an 'int' for IPv4 addresses is awkward, and an 'int' for IPv6 addresses in insufficient - so even when the address is numeric, you STILL have to pass it in as 'str'. Okay, experiment failed, your interface seems like the correct thing to do. > diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c > index fe1d07a..6f1c10a 100644 > --- a/util/qemu-sockets.c > +++ b/util/qemu-sockets.c > @@ -141,6 +141,9 @@ static int inet_listen_saddr(InetSocketAddress *saddr, > > memset(&ai,0, sizeof(ai)); > ai.ai_flags = AI_PASSIVE; > + if (saddr->numeric) { 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; > > -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature