From 3d166efe4f3ee6a93edf361a9d72633a00fb486f Mon Sep 17 00:00:00 2001 From: Micael Karlberg Date: Tue, 29 Jan 2019 12:41:19 +0100 Subject: [socket-nif] The otp rcvbuf option updated Its now possible to set a rcvbuf (otp) option value of {N :: pos_integer(), BufSz :: pos_integer()}. This value is used for type stream and protocol tcp, when calling the function recv with length = 0 (zero). The second value, BufSz, is the actual size of the receive buffer used when calling the socket recv function, and the first value, N, is the max number of possible reads that will be performed (at most), even if there is more data to read. This is limit the effect of DoS attacks. OTP-15497 --- erts/preloaded/ebin/socket.beam | Bin 70344 -> 69888 bytes erts/preloaded/src/socket.erl | 8 +++++++- 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'erts/preloaded') diff --git a/erts/preloaded/ebin/socket.beam b/erts/preloaded/ebin/socket.beam index 06e7c2910d..0066ca2433 100644 Binary files a/erts/preloaded/ebin/socket.beam and b/erts/preloaded/ebin/socket.beam differ diff --git a/erts/preloaded/src/socket.erl b/erts/preloaded/src/socket.erl index 839087ef2a..80ccd7ea10 100644 --- a/erts/preloaded/src/socket.erl +++ b/erts/preloaded/src/socket.erl @@ -2553,9 +2553,15 @@ enc_setopt_value(otp, iow, V, _, _, _) when is_boolean(V) -> enc_setopt_value(otp, controlling_process, V, _, _, _) when is_pid(V) -> V; enc_setopt_value(otp, rcvbuf, V, _, _, _) when (V =:= default) -> - 0; + 0; % This will cause the nif-code to choose the default value enc_setopt_value(otp, rcvbuf, V, _, _, _) when is_integer(V) andalso (V > 0) -> V; +%% N: Number of reads (when specifying length = 0) +%% V: Size of the "read" buffer +enc_setopt_value(otp, rcvbuf, {N, BufSz} = V, _, stream = _T, tcp = _P) + when (is_integer(N) andalso (N > 0)) andalso + (is_integer(BufSz) andalso (BufSz > 0)) -> + V; enc_setopt_value(otp, rcvctrlbuf, V, _, _, _) when (V =:= default) -> 0; enc_setopt_value(otp, rcvctrlbuf, V, _, _, _) when is_integer(V) andalso (V > 0) -> -- cgit v1.2.3