]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-master, master: Replace inet_listener_reuse_port with service_reuse_port
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 26 Mar 2026 14:57:54 +0000 (16:57 +0200)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Tue, 7 Apr 2026 16:19:06 +0000 (16:19 +0000)
All inet_listeners require the same value for reuse_port, so it's better to
be a service setting.

src/lib-master/service-settings.h
src/master/master-settings.c
src/master/service-listen.c
src/master/service-process.c
src/master/service.h

index 40c0076459d92b293aff88be43ff14d583c570df..9143c59dcbc999abb4f6de5b002cf0236ebcb517 100644 (file)
@@ -48,7 +48,6 @@ struct inet_listener_settings {
        /* copied from master_settings: */
        ARRAY_TYPE(const_string) listen;
        bool ssl;
-       bool reuse_port;
        bool haproxy;
 };
 ARRAY_DEFINE_TYPE(inet_listener_settings, struct inet_listener_settings *);
@@ -66,6 +65,7 @@ struct service_settings {
        const char *chroot;
 
        bool drop_priv_before_exec;
+       bool reuse_port;
 
        unsigned int process_min_avail;
        unsigned int process_limit;
index f3d54b6ecf446944161d1592832b5082e8cc6ad8..ea2da9c6cbf408b469942a42bfc8ea7fc3c74e5a 100644 (file)
@@ -84,7 +84,6 @@ static const struct setting_define inet_listener_setting_defines[] = {
        DEF(STR, type),
        DEF(IN_PORT, port),
        DEF(BOOL, ssl),
-       DEF(BOOL, reuse_port),
        DEF(BOOL, haproxy),
 
        SETTING_DEFINE_LIST_END
@@ -95,7 +94,6 @@ static const struct inet_listener_settings inet_listener_default_settings = {
        .type = "",
        .port = 0,
        .ssl = FALSE,
-       .reuse_port = FALSE,
        .haproxy = FALSE
 };
 
@@ -125,6 +123,7 @@ static const struct setting_define service_setting_defines[] = {
        DEF(STR, chroot),
 
        DEF(BOOL, drop_priv_before_exec),
+       DEF(BOOL, reuse_port),
 
        DEF(UINT, process_min_avail),
        DEF(UINT, process_limit),
@@ -158,6 +157,7 @@ static const struct service_settings service_default_settings = {
        .chroot = "",
 
        .drop_priv_before_exec = FALSE,
+       .reuse_port = FALSE,
 
        .process_min_avail = 0,
        .process_limit = 0,
index db29aba71c658030af218e75ad73bf5053235b5f..b8dd596d7eb348f41792e654f1532928c5ae58c9 100644 (file)
@@ -198,7 +198,7 @@ service_inet_listener_listen(struct service_listener *l, const char **error_r)
        if (fd == -1)
 #endif
        {
-               if (set->reuse_port)
+               if (service->set->reuse_port)
                        flags |= NET_LISTEN_FLAG_REUSEPORT;
                fd = net_listen_full(&l->set.inetset.ip, &port, &flags,
                                     service_get_backlog(service));
@@ -207,7 +207,6 @@ service_inet_listener_listen(struct service_listener *l, const char **error_r)
                                                   l->inet_address, set->port);
                        return errno == EADDRINUSE ? 0 : -1;
                }
-               l->reuse_port = (flags & NET_LISTEN_FLAG_REUSEPORT) != 0;
        }
        net_set_nonblock(fd, TRUE);
        fd_close_on_exec(fd, TRUE);
index 2212162233aa3668ef3e3873be36f9c5e2e70c4a..cd6b5a4ce363f64c93f62c322b6b5dbb4137f049 100644 (file)
@@ -42,7 +42,7 @@ static void service_reopen_inet_listeners(struct service *service)
 
        listeners = array_get(&service->listeners, &count);
        for (i = 0; i < count; i++) {
-               if (!listeners[i]->reuse_port || listeners[i]->fd == -1)
+               if (!service->set->reuse_port || listeners[i]->fd == -1)
                        continue;
 
                old_fd = listeners[i]->fd;
index 92baed87018bbbebd65968f3912b444323dbf785..6582e6504eeda493359950336095eca0f221c653 100644 (file)
@@ -39,8 +39,6 @@ struct service_listener {
                        struct ip_addr ip;
                } inetset;
        } set;
-
-       bool reuse_port;
 };
 
 struct service {