dovecot-2.0: master: Changed listener backlog calculations.
dovecot at dovecot.org
dovecot at dovecot.org
Sat Mar 27 07:03:26 EET 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/aefa279e2c70
changeset: 11014:aefa279e2c70
user: Timo Sirainen <tss at iki.fi>
date: Sat Mar 27 07:03:24 2010 +0200
description:
master: Changed listener backlog calculations.
diffstat:
src/master/service-listen.c | 26 ++++++++++++++++++++------
1 files changed, 20 insertions(+), 6 deletions(-)
diffs (54 lines):
diff -r 96496e1d3d12 -r aefa279e2c70 src/master/service-listen.c
--- a/src/master/service-listen.c Sat Mar 27 06:54:51 2010 +0200
+++ b/src/master/service-listen.c Sat Mar 27 07:03:24 2010 +0200
@@ -12,22 +12,35 @@
#include <fcntl.h>
#include <sys/stat.h>
+#define MIN_BACKLOG 4
#define MAX_BACKLOG 128
+static unsigned int service_get_backlog(struct service *service)
+{
+ unsigned int backlog;
+
+ /* as unlikely as it is, avoid overflows */
+ if (service->process_limit > MAX_BACKLOG ||
+ service->client_limit > MAX_BACKLOG)
+ backlog = MAX_BACKLOG;
+ else {
+ backlog = service->process_limit * service->client_limit;
+ if (backlog > MAX_BACKLOG)
+ backlog = MAX_BACKLOG;
+ }
+ return I_MAX(backlog, MIN_BACKLOG);
+}
+
static int service_unix_listener_listen(struct service_listener *l)
{
struct service *service = l->service;
const struct file_listener_settings *set = l->set.fileset.set;
mode_t old_umask;
- unsigned int backlog;
int fd, i;
old_umask = umask((set->mode ^ 0777) & 0777);
for (i = 0;; i++) {
- backlog = service->process_limit * service->client_limit;
- if (backlog > MAX_BACKLOG)
- backlog = MAX_BACKLOG;
- fd = net_listen_unix(set->path, backlog);
+ fd = net_listen_unix(set->path, service_get_backlog(service));
if (fd != -1)
break;
@@ -133,7 +146,8 @@
unsigned int port = set->port;
int fd;
- fd = net_listen(&l->set.inetset.ip, &port, 128);
+ fd = net_listen(&l->set.inetset.ip, &port,
+ service_get_backlog(service));
if (fd < 0) {
service_error(service, "listen(%s, %u) failed: %m",
l->inet_address, set->port);
More information about the dovecot-cvs
mailing list