summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Klishin <michael@novemberain.com>2015-08-25 03:18:22 +0300
committerMichael Klishin <michael@novemberain.com>2015-08-25 03:18:22 +0300
commitb61c80d1d75d162b8fd9e2958f03bd5b4ad96b82 (patch)
treee98d8fd0fb021926aaacb4729862b09895124ec6
parentb72d210ff7b7c4c82708e6882694199108f55364 (diff)
parent695be6bae122364352922601730364957573f285 (diff)
downloadrabbitmq-server-git-b61c80d1d75d162b8fd9e2958f03bd5b4ad96b82.tar.gz
Merge pull request #285 from rabbitmq/rabbitmq-server-282
Force essential listen socket options
-rw-r--r--src/rabbit_networking.erl18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/rabbit_networking.erl b/src/rabbit_networking.erl
index 5d87743472..f95f8c5818 100644
--- a/src/rabbit_networking.erl
+++ b/src/rabbit_networking.erl
@@ -475,8 +475,22 @@ hostname() ->
cmap(F) -> rabbit_misc:filter_exit_map(F, connections()).
tcp_opts() ->
- {ok, Opts} = application:get_env(rabbit, tcp_listen_options),
- Opts.
+ {ok, ConfigOpts} = application:get_env(rabbit, tcp_listen_options),
+ merge_essential_tcp_listen_options(ConfigOpts).
+
+-define(ESSENTIAL_LISTEN_OPTIONS,
+ [binary,
+ {active, false},
+ {packet, raw},
+ {reuseaddr, true},
+ {nodelay, true}]).
+
+merge_essential_tcp_listen_options(Opts) ->
+ lists:foldl(fun ({K, _} = Opt, Acc) ->
+ lists:keystore(K, 1, Acc, Opt);
+ (Opt, Acc) ->
+ [Opt | Acc]
+ end , Opts, ?ESSENTIAL_LISTEN_OPTIONS).
%% inet_parse:address takes care of ip string, like "0.0.0.0"
%% inet:getaddr returns immediately for ip tuple {0,0,0,0},