sysdeps: increase listen() backlog of AF_UNIX sockets to SOMAXCONN
authorLennart Poettering <lennart@poettering.net>
Wed, 4 May 2016 16:06:17 +0000 (18:06 +0200)
committerSimon McVittie <smcv@debian.org>
Tue, 15 Aug 2017 15:53:16 +0000 (11:53 -0400)
commita8dc1ebdaec43b175c831a944933c2170b6eaaea
treec0f6fe30987fdbcab7cb3755ffdcb5c5d2fe2451
parent3cf2d6a1ca43253e5be916b8cfa30fd9ba1a2ef0
sysdeps: increase listen() backlog of AF_UNIX sockets to SOMAXCONN

Previously, the listen() backlog was set to an arbitrary 30. This means
that if dbus-daemon is overloaded only 30 more connections may be queued
by the kernel, before connect() fails with EAGAIN. (Note that EAGAIN !=
EINPROGRESS -- the latter is what is returned if a connection is queued
and being processed for asynchronous sockets; EAGAIN in this case is
really an error, that cannot be recovered from).

Most software simply sets SOMAXCONN as backlog for AF_UNIX sockets, to
allow queuing of as many connections as the kernel allows. SOMAXCONN is
128 on Linux, which is not particularly high, but at least higher than
30.

This patch changes dbus-daemon to do the same.

I noticed this when flooding dbus-daemon with a lot of connections,
where it pretty quickly ceased to respond, much earlier than it really
should.

Note that the backlog has nothing to do with the number of concurrent
connections allowed, it simply controls how many queued, but not
accept()ed connections there may be on the listening socket.

(cherry picked from commit 12bd6e893c91430fdbdf8a27087d4a792b04eef9)
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=95264
Bug-Debian: https://bugs.debian.org/872144
Reviewed-by: Simon McVittie <smcv@collabora.com>
Reviewed-by: Thiago Macieira <thiago@kde.org>
dbus/dbus-sysdeps-unix.c