diff --git a/src/connection.c b/src/connection.c
index 9b2e92a..b728225 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -17,6 +17,7 @@
 
 #include <proto/connection.h>
 #include <proto/fd.h>
+#include <proto/frontend.h>
 #include <proto/proto_tcp.h>
 #include <proto/session.h>
 #include <proto/stream_interface.h>
@@ -59,6 +60,10 @@
 		if (conn->flags & CO_FL_SI_SEND_PROXY)
 			if (!conn_si_send_proxy(conn, CO_FL_SI_SEND_PROXY))
 				goto leave;
+
+		if (conn->flags & CO_FL_LOCAL_SPROXY)
+			if (!conn_local_send_proxy(conn, CO_FL_LOCAL_SPROXY))
+				goto leave;
 #ifdef USE_OPENSSL
 		if (conn->flags & CO_FL_SSL_WAIT_HS)
 			if (!ssl_sock_handshake(conn, CO_FL_SSL_WAIT_HS))
@@ -508,3 +513,73 @@
 	}
 	return ret;
 }
+
+/* This callback is used to send a valid PROXY protocol line to a socket being
+ * established from the local machine. It sets the protocol addresses to the
+ * local and remote address. This is typically used with health checks or when
+ * it is not possible to determine the other end's address. It returns 0 if it
+ * fails in a fatal way or needs to poll to go further, otherwise it returns
+ * non-zero and removes itself from the connection's flags (the bit is provided
+ * in <flag> by the caller). It is designed to be called by the connection
+ * handler and relies on it to commit polling changes. Note that this function
+ * expects to be able to send the whole line at once, which should always be
+ * possible since it is supposed to start at the first byte of the outgoing
+ * data segment.
+ */
+int conn_local_send_proxy(struct connection *conn, unsigned int flag)
+{
+	int ret, len;
+
+	/* we might have been called just after an asynchronous shutw */
+	if (conn->flags & CO_FL_SOCK_WR_SH)
+		goto out_error;
+
+	/* The target server expects a PROXY line to be sent first. */
+	conn_get_from_addr(conn);
+	if (!(conn->flags & CO_FL_ADDR_FROM_SET))
+		goto out_error;
+
+	conn_get_to_addr(conn);
+	if (!(conn->flags & CO_FL_ADDR_TO_SET))
+		goto out_error;
+
+	len = make_proxy_line(trash, trashlen, &conn->addr.from, &conn->addr.to);
+	if (!len)
+		goto out_error;
+
+	/* we have to send trash from len bytes. If the data layer has a
+	 * pending write, we'll also set MSG_MORE.
+	 */
+	ret = send(conn->t.sock.fd, trash, len, (conn->flags & CO_FL_DATA_WR_ENA) ? MSG_MORE : 0);
+
+	if (ret == 0)
+		goto out_wait;
+
+	if (ret < 0) {
+		if (errno == EAGAIN)
+			goto out_wait;
+		goto out_error;
+	}
+
+	if (ret != len)
+		goto out_error;
+
+	/* The connection is ready now, simply return and let the connection
+	 * handler notify upper layers if needed.
+	 */
+	if (conn->flags & CO_FL_WAIT_L4_CONN)
+		conn->flags &= ~CO_FL_WAIT_L4_CONN;
+	conn->flags &= ~flag;
+	return 1;
+
+ out_error:
+	/* Write error on the file descriptor */
+	conn->flags |= CO_FL_ERROR;
+	conn->flags &= ~flag;
+	return 0;
+
+ out_wait:
+	__conn_sock_stop_recv(conn);
+	__conn_sock_poll_send(conn);
+	return 0;
+}
