From: Timo Sirainen Date: Sat, 14 Nov 2020 17:56:06 +0000 (+0200) Subject: master: service_unix_listener_listen() - Add verify_addrinuse parameter X-Git-Tag: 2.4.0~4558 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e1c57f575381b92d329bb1e19c762e7796eeab03;p=thirdparty%2Fdovecot%2Fcore.git master: service_unix_listener_listen() - Add verify_addrinuse parameter --- diff --git a/src/master/service-listen.c b/src/master/service-listen.c index b443b9a078..31facef829 100644 --- a/src/master/service-listen.c +++ b/src/master/service-listen.c @@ -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); diff --git a/src/master/service-listen.h b/src/master/service-listen.h index 214512a41b..95e4009d79 100644 --- a/src/master/service-listen.h +++ b/src/master/service-listen.h @@ -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