From: Timo Sirainen Date: Wed, 5 Jan 2022 21:46:12 +0000 (+0200) Subject: lib: Add connection_client_connect_with_retries() X-Git-Tag: 2.4.0~4561 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=aae530abbf88eb0c79113e4e3eaa635571e7ba88;p=thirdparty%2Fdovecot%2Fcore.git lib: Add connection_client_connect_with_retries() --- diff --git a/src/lib/connection.c b/src/lib/connection.c index 638c28ce2b..e540f61871 100644 --- a/src/lib/connection.c +++ b/src/lib/connection.c @@ -695,7 +695,8 @@ static void connection_socket_connected(struct connection *conn) connection_client_connected(conn, errno == 0); } -int connection_client_connect(struct connection *conn) +int connection_client_connect_with_retries(struct connection *conn, + unsigned int msecs) { const struct connection_settings *set = &conn->list->set; int fd; @@ -709,12 +710,10 @@ int connection_client_connect(struct connection *conn) fd = net_connect_ip(&conn->remote_ip, conn->remote_port, (conn->local_ip.family != 0 ? &conn->local_ip : NULL)); - } else if (conn->list->set.unix_client_connect_msecs == 0) { + } else if (msecs == 0) { fd = net_connect_unix(conn->base_name); } else { - fd = net_connect_unix_with_retries( - conn->base_name, - conn->list->set.unix_client_connect_msecs); + fd = net_connect_unix_with_retries(conn->base_name, msecs); } if (fd == -1) return -1; @@ -741,6 +740,12 @@ int connection_client_connect(struct connection *conn) return 0; } +int connection_client_connect(struct connection *conn) +{ + return connection_client_connect_with_retries(conn, + conn->list->set.unix_client_connect_msecs); +} + static void connection_update_counters(struct connection *conn) { if (conn->input != NULL) diff --git a/src/lib/connection.h b/src/lib/connection.h index efe82808e9..398637cfde 100644 --- a/src/lib/connection.h +++ b/src/lib/connection.h @@ -201,6 +201,10 @@ void connection_init_from_streams(struct connection_list *list, struct ostream *output) ATTR_NULL(3); int connection_client_connect(struct connection *conn); +/* Connect to UNIX socket. If it fails, try it up to msecs is reached. + Overrides connection_settings.unix_client_connect_msecs. */ +int connection_client_connect_with_retries(struct connection *conn, + unsigned int msecs); /* Disconnects a connection */ void connection_disconnect(struct connection *conn);