From: Timo Sirainen Date: Tue, 12 May 2015 18:58:03 +0000 (+0300) Subject: lib: connection API: Added delayed_unix_client_connected_callback setting. X-Git-Tag: 2.2.17.rc2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cb3ab2fd5668700a89b274a43595cfbfa1616e4b;p=thirdparty%2Fdovecot%2Fcore.git lib: connection API: Added delayed_unix_client_connected_callback setting. 092a51d80bad commit changed this functionality first to fix lib-http code, but it broke other code. 1fac17a2bc53 reversed the original behavior. This change allows either behavior optionally. --- diff --git a/src/lib/connection.c b/src/lib/connection.c index 191ee60921..5f872bc7df 100644 --- a/src/lib/connection.c +++ b/src/lib/connection.c @@ -262,7 +262,8 @@ int connection_client_connect(struct connection *conn) return -1; conn->fd_in = conn->fd_out = fd; - if (conn->port != 0) { + if (conn->port != 0 || + conn->list->set.delayed_unix_client_connected_callback) { conn->io = io_add(conn->fd_out, IO_WRITE, connection_socket_connected, conn); if (set->client_connect_timeout_msecs != 0) { diff --git a/src/lib/connection.h b/src/lib/connection.h index 02c1de87e4..f9245c37d9 100644 --- a/src/lib/connection.h +++ b/src/lib/connection.h @@ -27,8 +27,9 @@ enum connection_disconnect_reason { struct connection_vfuncs { void (*destroy)(struct connection *conn); - /* For UNIX socket clients this gets called immediately with - success=TRUE, for IP connections it gets called later: + /* For UNIX socket clients this gets called immediately (unless + delayed_unix_client_connected_callback=TRUE) with success=TRUE, + for IP connections it gets called later: If connect() fails, sets success=FALSE and errno. Streams aren't initialized in that situation either. destroy() is called after @@ -57,6 +58,11 @@ struct connection_settings { bool client; bool dont_send_version; + /* Don't call client_connected() immediately on + connection_client_connect() with UNIX sockets. This is mainly + to make the functionality identical with inet sockets, which may + simplify the calling code. */ + bool delayed_unix_client_connected_callback; }; struct connection {