summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_networking.erl20
-rw-r--r--src/rabbit_reader.erl2
2 files changed, 20 insertions, 2 deletions
diff --git a/src/rabbit_networking.erl b/src/rabbit_networking.erl
index bf945b4d6a..cd65841933 100644
--- a/src/rabbit_networking.erl
+++ b/src/rabbit_networking.erl
@@ -35,7 +35,8 @@
connection_info/1, connection_info/2,
connection_info_all/0, connection_info_all/1,
emit_connection_info_all/4, emit_connection_info_local/3,
- close_connection/2, force_connection_event_refresh/1, tcp_host/1]).
+ close_connection/2, force_connection_event_refresh/1, accept_ack/2,
+ tcp_host/1]).
%% Used by TCP-based transports, e.g. STOMP adapter
-export([tcp_listener_addresses/1, tcp_listener_spec/9,
@@ -86,6 +87,7 @@
[rabbit_types:infos()].
-spec close_connection(pid(), string()) -> 'ok'.
-spec force_connection_event_refresh(reference()) -> 'ok'.
+-spec accept_ack(any(), rabbit_net:socket()) -> ok.
-spec on_node_down(node()) -> 'ok'.
-spec tcp_listener_addresses(listener_config()) -> [address()].
@@ -336,6 +338,22 @@ force_connection_event_refresh(Ref) ->
[rabbit_reader:force_event_refresh(C, Ref) || C <- connections()],
ok.
+accept_ack(Ref, Sock) ->
+ ok = ranch:accept_ack(Ref),
+ case tune_buffer_size(Sock) of
+ ok -> ok;
+ {error, _} -> rabbit_net:fast_close(Sock),
+ exit(normal)
+ end,
+ ok = file_handle_cache:obtain().
+
+tune_buffer_size(Sock) ->
+ case rabbit_net:getopts(Sock, [sndbuf, recbuf, buffer]) of
+ {ok, BufSizes} -> BufSz = lists:max([Sz || {_Opt, Sz} <- BufSizes]),
+ rabbit_net:setopts(Sock, [{buffer, BufSz}]);
+ Error -> Error
+ end.
+
%%--------------------------------------------------------------------
tcp_host(IPAddress) ->
diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl
index df9d783db1..9f3445731b 100644
--- a/src/rabbit_reader.erl
+++ b/src/rabbit_reader.erl
@@ -197,7 +197,7 @@ shutdown(Pid, Explanation) ->
init(Parent, HelperSup, Ref, Sock) ->
RealSocket = rabbit_net:unwrap_socket(Sock),
- rabbit_net:accept_ack(Ref, RealSocket),
+ rabbit_networking:accept_ack(Ref, RealSocket),
Deb = sys:debug_options([]),
start_connection(Parent, HelperSup, Deb, Sock).