From 6e86f7397a3c7730cc79d8fa55f0035f9d047436 Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Mon, 28 May 2012 15:43:53 +0100 Subject: refactor: move socket buffer size tuning into rabbit_net so it can be re-used in stomp et al --- src/rabbit_net.erl | 10 +++++++++- src/rabbit_reader.erl | 9 +-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/rabbit_net.erl b/src/rabbit_net.erl index 1a12d43b..bedf5142 100644 --- a/src/rabbit_net.erl +++ b/src/rabbit_net.erl @@ -20,7 +20,7 @@ -export([is_ssl/1, ssl_info/1, controlling_process/2, getstat/2, recv/1, async_recv/3, port_command/2, getopts/2, setopts/2, send/2, close/1, maybe_fast_close/1, sockname/1, peername/1, peercert/1, - connection_string/2]). + tune_buffer_size/1, connection_string/2]). %%--------------------------------------------------------------------------- @@ -69,6 +69,7 @@ -spec(peercert/1 :: (socket()) -> 'nossl' | ok_val_or_error(rabbit_ssl:certificate())). +-spec(tune_buffer_size/1 :: (socket()) -> ok_or_any_error()). -spec(connection_string/2 :: (socket(), 'inbound' | 'outbound') -> ok_val_or_error(string())). @@ -159,6 +160,13 @@ peername(Sock) when is_port(Sock) -> inet:peername(Sock). peercert(Sock) when ?IS_SSL(Sock) -> ssl:peercert(Sock#ssl_socket.ssl); peercert(Sock) when is_port(Sock) -> nossl. +tune_buffer_size(Sock) -> + case getopts(Sock, [sndbuf, recbuf, buffer]) of + {ok, BufSizes} -> BufSz = lists:max([Sz || {_Opt, Sz} <- BufSizes]), + setopts(Sock, [{buffer, BufSz}]); + Err -> Err + end. + connection_string(Sock, Direction) -> {From, To} = case Direction of inbound -> {fun peername/1, fun sockname/1}; diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl index 463bdd83..b773f83b 100644 --- a/src/rabbit_reader.erl +++ b/src/rabbit_reader.erl @@ -222,14 +222,7 @@ start_connection(Parent, ChannelSupSupPid, Collector, StartHeartbeatFun, Deb, last_blocked_by = none, last_blocked_at = never}, try - BufSizes = inet_op(fun () -> - rabbit_net:getopts( - ClientSock, [sndbuf, recbuf, buffer]) - end), - BufSz = lists:max([Sz || {_Opt, Sz} <- BufSizes]), - ok = inet_op(fun () -> - rabbit_net:setopts(ClientSock, [{buffer, BufSz}]) - end), + ok = inet_op(fun () -> rabbit_net:tune_buffer_size(ClientSock) end), recvloop(Deb, switch_callback(rabbit_event:init_stats_timer( State, #v1.stats_timer), handshake, 8)), -- cgit v1.2.1