On Fri, Feb 05, 2021 at 12:57:05PM -0600, Eric Blake wrote: > Our default of a backlog of 1 connection is rather puny, particularly > for scenarios where we expect multiple listeners to connect (such as > qemu-nbd -e X). This is especially important for Unix sockets, as a > definite benefit to clients: at least on Linux, a client trying to > connect to a Unix socket with a backlog gets an EAGAIN failure with no > way to poll() for when the backlog is no longer present short of > sleeping an arbitrary amount of time before retrying. > > See https://bugzilla.redhat.com/1925045 for a demonstration of where > our low backlog prevents libnbd from connecting as many parallel > clients as it wants. > > Reported-by: Richard W.M. Jones <rjo...@redhat.com> > Signed-off-by: Eric Blake <ebl...@redhat.com> > --- > > v2: target the correct API used by qemu-nbd, rather than an unrelated > legacy wrapper [Dan] > > qemu-nbd.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/qemu-nbd.c b/qemu-nbd.c > index 608c63e82a25..cd20ee73be19 100644 > --- a/qemu-nbd.c > +++ b/qemu-nbd.c > @@ -965,7 +965,8 @@ int main(int argc, char **argv) > server = qio_net_listener_new(); > if (socket_activation == 0) { > saddr = nbd_build_socket_address(sockpath, bindto, port); > - if (qio_net_listener_open_sync(server, saddr, 1, &local_err) < 0) { > + if (qio_net_listener_open_sync(server, saddr, SOMAXCONN, > + &local_err) < 0) { > object_unref(OBJECT(server)); > error_report_err(local_err); > exit(EXIT_FAILURE);
This one works: Tested-by: Richard W.M. Jones <rjo...@redhat.com> Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-top is 'top' for virtual machines. Tiny program with many powerful monitoring features, net stats, disk stats, logging, etc. http://people.redhat.com/~rjones/virt-top