fixeria submitted this change.
osmo_dia2gsup: set sndbuf/recbuf explicitly for SCTP
When opening an SCTP socket on Linux, Erlang/OTP does set its own
default SO_SNDBUF/SO_RCVBUF values if the respective socket options
(sndbuf and recbuf) are not given to gen_sctp:open/N explicitly.
For some reason, the default RCVBUF size (1024) is much smaller than
the default SNDBUF size (65536), and both are well below modern Linux
defaults. Such a small RCVBUF size becomes problematic when the
remote peer is sending large packets.
Let's explicitly set both sndbuf/recbuf parameters to 65536, allowing
the user to overwrite this default via the environment parameters.
For more details, see https://github.com/erlang/otp/issues/9722.
Change-Id: I793f1295ab42bfc548511fc5ffbda9070280745f
---
M src/osmo_dia2gsup.erl
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/osmo_dia2gsup.erl b/src/osmo_dia2gsup.erl
index 4f7f21f..cda616b 100644
--- a/src/osmo_dia2gsup.erl
+++ b/src/osmo_dia2gsup.erl
@@ -48,6 +48,7 @@
-define(SERVER, ?MODULE).
-define(ENV_DEFAULT_NODELAY, true).
+-define(ENV_DEFAULT_SCTP_BUFSZ, 65536).
% Diameter application definitions
@@ -162,7 +163,9 @@
tcfg(Cfg, LAddr, LPort);
tcfg(sctp, LAddr, LPort) ->
- Cfg = #{sctp_nodelay => get_env(diameter_nodelay, ?ENV_DEFAULT_NODELAY)},
+ Cfg = #{sctp_nodelay => get_env(diameter_nodelay, ?ENV_DEFAULT_NODELAY),
+ recbuf => get_env(diameter_sctp_recbuf, ?ENV_DEFAULT_SCTP_BUFSZ),
+ sndbuf => get_env(diameter_sctp_sndbuf, ?ENV_DEFAULT_SCTP_BUFSZ)},
tcfg(Cfg, LAddr, LPort);
tcfg(Cfg, LAddr, LPort) when is_map(Cfg) ->
To view, visit change 40127. To unsubscribe, or for help writing mail filters, visit settings.