[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