Index: modules/proxy/mod_proxy_fdpass.c
===================================================================
--- modules/proxy/mod_proxy_fdpass.c	(revision 1602309)
+++ modules/proxy/mod_proxy_fdpass.c	(working copy)
@@ -54,56 +54,10 @@ static int proxy_fdpass_canon(request_rec *r, char
     return OK;
 }
 
-/* TODO: In APR 2.x: Extend apr_sockaddr_t to possibly be a path !!! */
-/* XXX: The same function exists in proxy_util.c */
-static apr_status_t socket_connect_un(apr_socket_t *sock,
-                                      struct sockaddr_un *sa)
-{
-    apr_status_t rv;
-    apr_os_sock_t rawsock;
-    apr_interval_time_t t;
-
-    rv = apr_os_sock_get(&rawsock, sock);
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-
-    rv = apr_socket_timeout_get(sock, &t);
-    if (rv != APR_SUCCESS) {
-        return rv;
-    }
-
-    do {
-        const socklen_t addrlen = APR_OFFSETOF(struct sockaddr_un, sun_path)
-                                  + strlen(sa->sun_path) + 1;
-        rv = connect(rawsock, (struct sockaddr*)sa, addrlen);
-    } while (rv == -1 && errno == EINTR);
-
-    if ((rv == -1) && (errno == EINPROGRESS || errno == EALREADY)
-        && (t > 0)) {
-#if APR_MAJOR_VERSION < 2
-        rv = apr_wait_for_io_or_timeout(NULL, sock, 0);
-#else
-        rv = apr_socket_wait(sock, APR_WAIT_WRITE);
-#endif
-
-        if (rv != APR_SUCCESS) {
-            return rv;
-        }
-    }
-
-    if (rv == -1 && errno != EISCONN) {
-        return errno;
-    }
-
-    return APR_SUCCESS;
-}
-
 static apr_status_t get_socket_from_path(apr_pool_t *p,
                                          const char* path,
                                          apr_socket_t **out_sock)
 {
-    struct sockaddr_un sa;
     apr_socket_t *s;
     apr_status_t rv;
     *out_sock = NULL;
@@ -114,10 +68,7 @@ static apr_status_t get_socket_from_path(apr_pool_
         return rv;
     }
 
-    sa.sun_family = AF_UNIX;
-    apr_cpystrn(sa.sun_path, path, sizeof(sa.sun_path));
-
-    rv = socket_connect_un(s, &sa);
+    rv = ap_proxy_connect_un(s, path, p);
     if (rv != APR_SUCCESS) {
         return rv;
     }
Index: modules/proxy/proxy_util.c
===================================================================
--- modules/proxy/proxy_util.c	(revision 1602309)
+++ modules/proxy/proxy_util.c	(working copy)
@@ -2550,13 +2550,15 @@ static apr_status_t send_http_connect(proxy_conn_r
 
 
 #if APR_HAVE_SYS_UN_H
-/* lifted from mod_proxy_fdpass.c; tweaked addrlen in connect() call */
-static apr_status_t socket_connect_un(apr_socket_t *sock,
-                                      struct sockaddr_un *sa)
+PROXY_DECLARE(apr_status_t) ap_proxy_connect_un(apr_socket_t *sock,
+                                                const char *uds_path,
+                                                apr_pool_t *p)
 {
     apr_status_t rv;
     apr_os_sock_t rawsock;
     apr_interval_time_t t;
+    struct sockaddr_un *sa;
+    apr_socklen_t salen, len;
 
     rv = apr_os_sock_get(&rawsock, sock);
     if (rv != APR_SUCCESS) {
@@ -2568,10 +2570,15 @@ static apr_status_t send_http_connect(proxy_conn_r
         return rv;
     }
 
+    len = strlen(uds_path);
+    salen = APR_OFFSETOF(struct sockaddr_un, sun_path) + len;
+    sa = (struct sockaddr_un *)apr_palloc(p, salen + 1);
+    sa->sun_family = AF_UNIX;
+    memcpy(sa->sun_path, uds_path, len);
+    sa->sun_path[len] = '\0';
+
     do {
-        const socklen_t addrlen = APR_OFFSETOF(struct sockaddr_un, sun_path)
-                                  + strlen(sa->sun_path) + 1;
-        rv = connect(rawsock, (struct sockaddr*)sa, addrlen);
+        rv = connect(rawsock, (struct sockaddr*)sa, salen);
     } while (rv == -1 && errno == EINTR);
 
     if ((rv == -1) && (errno == EINPROGRESS || errno == EALREADY)
@@ -2623,8 +2630,6 @@ PROXY_DECLARE(int) ap_proxy_connect_backend(const
 #if APR_HAVE_SYS_UN_H
         if (conn->uds_path)
         {
-            struct sockaddr_un sa;
-
             rv = apr_socket_create(&newsock, AF_UNIX, SOCK_STREAM, 0,
                                    conn->scpool);
             if (rv != APR_SUCCESS) {
@@ -2638,10 +2643,7 @@ PROXY_DECLARE(int) ap_proxy_connect_backend(const
             }
             conn->connection = NULL;
 
-            sa.sun_family = AF_UNIX;
-            apr_cpystrn(sa.sun_path, conn->uds_path, sizeof(sa.sun_path));
-
-            rv = socket_connect_un(newsock, &sa);
+            rv = ap_proxy_connect_un(newsock, conn->uds_path, conn->scpool);
             if (rv != APR_SUCCESS) {
                 apr_socket_close(newsock);
                 ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, APLOGNO(02454)
Index: modules/proxy/mod_proxy.h
===================================================================
--- modules/proxy/mod_proxy.h	(revision 1602309)
+++ modules/proxy/mod_proxy.h	(working copy)
@@ -874,7 +874,19 @@ PROXY_DECLARE(int) ap_proxy_connect_backend(const
                                             proxy_conn_rec *conn,
                                             proxy_worker *worker,
                                             server_rec *s);
+
 /**
+ * Make a connection to a Unix Domain Socket (UDS) path
+ * @param sock     UDS to connect
+ * @param uds_path UDS path to connect to
+ * @param p        pool used
+ * @return         APR_SUCCESS or error
+ */
+/* TODO: In APR 2.x: Extend apr_sockaddr_t to possibly be a path !!! */
+PROXY_DECLARE(apr_status_t) ap_proxy_connect_un(apr_socket_t *sock,
+                                                const char *uds_path,
+                                                apr_pool_t *p);
+/**
  * Make a connection record for backend connection
  * @param proxy_function calling proxy scheme (http, ajp, ...)
  * @param conn    acquired connection
Index: include/ap_mmn.h
===================================================================
--- include/ap_mmn.h	(revision 1602309)
+++ include/ap_mmn.h	(working copy)
@@ -461,6 +461,7 @@
                            Changes 3rd argument's type of
                            ap_mpm_register_socket_callback and 
                            ap_mpm_register_socket_callback_timeout.
+ * 20140611.1 (2.5.0-dev)  Add ap_proxy_connect_un().
  */
 
 #define MODULE_MAGIC_COOKIE 0x41503235UL /* "AP25" */
@@ -468,7 +469,7 @@
 #ifndef MODULE_MAGIC_NUMBER_MAJOR
 #define MODULE_MAGIC_NUMBER_MAJOR 20140611
 #endif
-#define MODULE_MAGIC_NUMBER_MINOR 0                  /* 0...n */
+#define MODULE_MAGIC_NUMBER_MINOR 1                  /* 0...n */
 
 /**
  * Determine if the server's current MODULE_MAGIC_NUMBER is at least a
