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); -- 2.30.0