]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: fix broken send_proxy on FreeBSD
authorWilly Tarreau <w@1wt.eu>
Tue, 3 Sep 2013 07:02:11 +0000 (09:02 +0200)
committerWilly Tarreau <w@1wt.eu>
Tue, 3 Sep 2013 07:08:31 +0000 (09:08 +0200)
David Berard reported that send-proxy was broken on FreeBSD and tracked the
issue to be an error returned by send(). We already had the same issue in
the past in another area which was addressed by the following commit :

   0ea0cf6 BUG: raw_sock: also consider ENOTCONN in addition to EAGAIN

In fact, on Linux send() returns EAGAIN when the connection is not yet
established while other OSes return ENOTCONN. Let's consider ENOTCONN for
send-proxy there as the same as EAGAIN.

David confirmed that this change properly fixed the issue.

Another place was affected as well (health checks with send-proxy), and
was fixed.

This fix does not need any backport since it only affects 1.5.

src/connection.c
src/stream_interface.c

index f86afde816114a0301c9a58a1e416738aba0fa0d..ad523b9606e0bc2fa19dc7bffb06135d7de8f747 100644 (file)
@@ -573,7 +573,7 @@ int conn_local_send_proxy(struct connection *conn, unsigned int flag)
                goto out_wait;
 
        if (ret < 0) {
-               if (errno == EAGAIN)
+               if (errno == EAGAIN || errno == ENOTCONN)
                        goto out_wait;
                goto out_error;
        }
index 33f1d0efc026d4f5865a6b7076ef4fedd3bc0b02..6a21c641f374f0db726b397eeb09763bb621db95 100644 (file)
@@ -468,7 +468,7 @@ int conn_si_send_proxy(struct connection *conn, unsigned int flag)
                        goto out_wait;
 
                if (ret < 0) {
-                       if (errno == EAGAIN)
+                       if (errno == EAGAIN || errno == ENOTCONN)
                                goto out_wait;
                        goto out_error;
                }