Re: [PATCH v3 3/9] rpc: set listen backlog on FDs as well as on other sockets

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Jul 23, 2014 at 04:27:07PM +0200, Martin Kletzander wrote:
> Signed-off-by: Martin Kletzander <mkletzan@xxxxxxxxxx>
> ---
>  src/locking/lock_daemon.c     | 2 +-
>  src/rpc/virnetserverservice.c | 5 +++++
>  src/rpc/virnetserverservice.h | 1 +
>  3 files changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/src/locking/lock_daemon.c b/src/locking/lock_daemon.c
> index e9219d5..02d77e3 100644
> --- a/src/locking/lock_daemon.c
> +++ b/src/locking/lock_daemon.c
> @@ -614,7 +614,7 @@ virLockDaemonSetupNetworkingSystemD(virNetServerPtr srv)
>  #if WITH_GNUTLS
>                                           NULL,
>  #endif
> -                                         false, 1)))
> +                                         false, 0, 1)))
>          return -1;
> 
>      if (virNetServerAddService(srv, svc, NULL) < 0) {
> diff --git a/src/rpc/virnetserverservice.c b/src/rpc/virnetserverservice.c
> index e85889b..fea05c3 100644
> --- a/src/rpc/virnetserverservice.c
> +++ b/src/rpc/virnetserverservice.c
> @@ -133,6 +133,7 @@ virNetServerServiceNewFDOrUNIX(const char *path,
>                                          tls,
>  #endif
>                                          readonly,
> +                                        max_queued_clients,
>                                          nrequests_client_max);
>      }
>  }
> @@ -265,6 +266,7 @@ virNetServerServicePtr virNetServerServiceNewFD(int fd,
>                                                  virNetTLSContextPtr tls,
>  #endif
>                                                  bool readonly,
> +                                                size_t max_queued_clients,
>                                                  size_t nrequests_client_max)
>  {
>      virNetServerServicePtr svc;
> @@ -292,6 +294,9 @@ virNetServerServicePtr virNetServerServiceNewFD(int fd,
>          goto error;
> 
>      for (i = 0; i < svc->nsocks; i++) {
> +        if (virNetSocketListen(svc->socks[i], max_queued_clients) < 0)
> +            goto error;

Hmm, systemd should have already called listen() on the socket FD it
passes to us. I wonder if it is better than we do the same when
auto-spawning libvirtd passing it a listening socket. You kind of
need to listen() to avoid a race condition I believe when spawning
libvirtd twice. eg if libvirt.so calls listen() and it fails then
we know there's another libvirtd in the process of being started
on that socket, so we can go back to trying to connect() until it
succeeeds.

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]