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 <[email protected]> > --- > 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
