[libvirt] [PATCH 3/4] Report error if unable to bind to any socket
Laine Stump
laine at laine.org
Mon Jul 25 18:41:37 UTC 2011
On 07/25/2011 01:03 PM, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange"<berrange at redhat.com>
>
> When setting up a server socket, we must skip EADDRINUSE errors
> from bind, since the IPv6 socket bind may have already bound to
> the IPv4 socket too. If we don't manage to bind to any sockets
> at all though, we should then report the EADDRINUSE error as
> normal.
>
> This fixes the case where libvirtd would not exit if some other
> program was listening on its TCP/TLS ports.
>
> * src/rpc/virnetsocket.c: Report EADDRINUSE
> ---
> src/rpc/virnetsocket.c | 9 +++++++++
> 1 files changed, 9 insertions(+), 0 deletions(-)
>
> diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c
> index d4c0bdd..dcdc937 100644
> --- a/src/rpc/virnetsocket.c
> +++ b/src/rpc/virnetsocket.c
> @@ -192,6 +192,7 @@ int virNetSocketNewListenTCP(const char *nodename,
> struct addrinfo hints;
> int fd = -1;
> int i;
> + int addrInUse = false;
>
> *retsocks = NULL;
> *nretsocks = 0;
> @@ -250,7 +251,9 @@ int virNetSocketNewListenTCP(const char *nodename,
> virReportSystemError(errno, "%s", _("Unable to bind to port"));
> goto error;
> }
> + addrInUse = true;
> VIR_FORCE_CLOSE(fd);
> + runp = runp->ai_next;
> continue;
> }
>
> @@ -273,6 +276,12 @@ int virNetSocketNewListenTCP(const char *nodename,
> fd = -1;
> }
>
> + if (nsocks == 0&&
> + addrInUse) {
> + virReportSystemError(EADDRINUSE, "%s", _("Unable to bind to port"));
> + goto error;
> + }
> +
> freeaddrinfo(ai);
>
> *retsocks = socks;
ACK
More information about the libvir-list
mailing list