On Wed, Jun 28, 2017 at 09:24:58AM -0500, Eric Blake wrote: > On 06/28/2017 08:23 AM, Daniel P. Berrange wrote: > > On Wed, Jun 28, 2017 at 09:08:49PM +0800, Mao Zhongyi wrote: > >> diff --git a/include/qemu/sockets.h b/include/qemu/sockets.h > >> index 5c326db..78e2b30 100644 > >> --- a/include/qemu/sockets.h > >> +++ b/include/qemu/sockets.h > > > >> if (qemu_isdigit(buf[0])) { > >> - if (!inet_aton(buf, &saddr->sin_addr)) > >> + if (!inet_aton(buf, &saddr->sin_addr)) { > >> + error_setg(errp, "host address '%s' is not a valid " > >> + "IPv4 address", buf); > >> return -1; > >> + } > >> } else { > >> - if ((he = gethostbyname(buf)) == NULL) > >> + he = gethostbyname(buf); > >> + if (he == NULL) { > >> + error_setg(errp, "can't resolve host address '%s': " > >> + "unknown host", buf); > >> return - 1; > >> + } > > > > gethostbyname sets 'h_errno' on failure, so you should pass that > > into error_setg_errno, instead of hardcoding 'unknown host' as a > > message > > 'man gethostbyname' says it is deprecated, and that applications should > use getaddrinfo/getnameinfo instead. What's our story here?
The real story is to get net/socket.c converted to QIOChannelSocket and kill this parse_host_port() method in sockets.c It is already broken by design since it takes a 'struct sockdddr_in' and thus can't do IPv6. This patch doesn't make the existing situation worse, so I think its fine to add this error reporting cleanup now, and not force immediate conversion to QIOChannelSocket today. The net/sockets.c code needs a further refactor before that conversion can be done in the right way - we've already reverted the wrong way twice ;-) Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|