]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
master: service_unix_listener_listen() - Add verify_addrinuse parameter
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Sat, 14 Nov 2020 17:56:06 +0000 (19:56 +0200)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 8 Feb 2022 09:48:24 +0000 (10:48 +0100)
src/master/service-listen.c
src/master/service-listen.h

index b443b9a07896d62abd9dd47fdda6d942a5df91b3..31facef82934e654aeb55204119496a2bf410566 100644 (file)
@@ -52,7 +52,7 @@ service_file_chown(const struct service_listener *l, const char **error_r)
 }
 
 int service_unix_listener_listen(struct service_listener *l,
-                                const char **error_r)
+                                bool verify_addrinuse, const char **error_r)
 {
         struct service *service = l->service;
        const struct file_listener_settings *set = l->set.fileset.set;
@@ -80,7 +80,12 @@ int service_unix_listener_listen(struct service_listener *l,
 
                /* already in use - see if it really exists.
                   after 3 times just fail here. */
-               fd = net_connect_unix(set->path);
+               if (verify_addrinuse)
+                       fd = net_connect_unix(set->path);
+               else {
+                       fd = -1;
+                       errno = ECONNREFUSED;
+               }
                if (fd != -1 || errno != ECONNREFUSED || i >= 3) {
                        i_close_fd(&fd);
                        *error_r = t_strdup_printf("Socket already exists: %s",
@@ -225,7 +230,7 @@ int service_listener_listen(struct service_listener *l)
 
        switch (l->type) {
        case SERVICE_LISTENER_UNIX:
-               ret = service_unix_listener_listen(l, &error);
+               ret = service_unix_listener_listen(l, TRUE, &error);
                break;
        case SERVICE_LISTENER_FIFO:
                ret = service_fifo_listener_listen(l, &error);
index 214512a41be8672d9f08fe3b4f92191db0e8b68a..95e4009d79aab448f5d8abb03fb1833387f2baf6 100644 (file)
@@ -16,6 +16,6 @@ int services_listen_using(struct service_list *new_service_list,
 int service_listener_listen(struct service_listener *l);
 
 int service_unix_listener_listen(struct service_listener *l,
-                                const char **error_r);
+                                bool verify_addrinuse, const char **error_r);
 
 #endif