summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Klishin <michael@clojurewerkz.org>2019-02-28 16:33:09 +0300
committerMichael Klishin <michael@clojurewerkz.org>2019-02-28 16:33:09 +0300
commita19d77f20e312246767d8bfaa87529c2b546260b (patch)
treee28e7579a3907634b1ee92348d4f07424a7ac7b5 /src
parent1485ca841451c50e05674fe90aa9763820464706 (diff)
parentbe587ad38fd9ac276e7ae9f4ceda12af004d9806 (diff)
downloadrabbitmq-server-git-a19d77f20e312246767d8bfaa87529c2b546260b.tar.gz
Merge branch 'master' into single-active-noconnection
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_networking.erl28
1 files changed, 22 insertions, 6 deletions
diff --git a/src/rabbit_networking.erl b/src/rabbit_networking.erl
index 1935196170..266ab567fa 100644
--- a/src/rabbit_networking.erl
+++ b/src/rabbit_networking.erl
@@ -389,13 +389,29 @@ force_connection_event_refresh(Ref) ->
[rabbit_reader:force_event_refresh(C, Ref) || C <- connections()],
ok.
-handshake(Ref, ProxyProtocol) ->
- case ProxyProtocol of
+failed_to_recv_proxy_header(Ref, Error) ->
+ Msg = case Error of
+ closed -> "error when receiving proxy header: TCP socket was ~p prematurely";
+ _Other -> "error when receiving proxy header: ~p"
+ end,
+ rabbit_log:error(Msg, [Error]),
+ % The following call will clean up resources then exit
+ _ = ranch:handshake(Ref),
+ exit({shutdown, failed_to_recv_proxy_header}).
+
+handshake(Ref, ProxyProtocolEnabled) ->
+ case ProxyProtocolEnabled of
true ->
- {ok, ProxyInfo} = ranch:recv_proxy_header(Ref, 1000),
- {ok, Sock} = ranch:handshake(Ref),
- setup_socket(Sock),
- {ok, {rabbit_proxy_socket, Sock, ProxyInfo}};
+ case ranch:recv_proxy_header(Ref, 3000) of
+ {error, Error} ->
+ failed_to_recv_proxy_header(Ref, Error);
+ {error, protocol_error, Error} ->
+ failed_to_recv_proxy_header(Ref, Error);
+ {ok, ProxyInfo} ->
+ {ok, Sock} = ranch:handshake(Ref),
+ setup_socket(Sock),
+ {ok, {rabbit_proxy_socket, Sock, ProxyInfo}}
+ end;
false ->
{ok, Sock} = ranch:handshake(Ref),
setup_socket(Sock),