fixeria has submitted this change. ( https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/40017?usp=email )
Change subject: sctp_{client,server}: allow passing additional sockopts ......................................................................
sctp_{client,server}: allow passing additional sockopts
Follow-up patches will be setting sctp_nodelay/recbuf/sndbuf.
Change-Id: I34f12be80c8844333f54a193ed078bb65771e246 Related: SYS#7288 --- M src/sctp_client.erl M src/sctp_server.erl 2 files changed, 7 insertions(+), 3 deletions(-)
Approvals: Jenkins Builder: Verified fixeria: Looks good to me, approved laforge: Looks good to me, but someone else must approve osmith: Looks good to me, but someone else must approve
diff --git a/src/sctp_client.erl b/src/sctp_client.erl index 7860446..0396109 100644 --- a/src/sctp_client.erl +++ b/src/sctp_client.erl @@ -43,7 +43,8 @@
-type cfg() :: #{laddr => any | string() | inet:ip_address(), raddr => loopback | string() | inet:ip_address(), - rport => inet:port_number() + rport => inet:port_number(), + sockopts => [gen_sctp:option()] }.
-type connect_result() :: {ok, gen_sctp:sctp_socket()}. @@ -79,13 +80,14 @@
-spec connect(cfg()) -> connect_result(). connect(Cfg) -> + SockOpts = maps:get(sockopts, Cfg, []), %% additional sockopts LAddr = sctp_common:parse_addr(maps:get(laddr, Cfg, any)), RAddr = sctp_common:parse_addr(maps:get(raddr, Cfg, localhost)), RPort = maps:get(rport, Cfg), {ok, Sock} = gen_sctp:open([{ip, LAddr}, {type, seqpacket}, {sctp_nodelay, true}, - {active, true}]), + {active, true}] ++ SockOpts), gen_sctp:connect_init(Sock, RAddr, RPort, []), {ok, Sock}.
diff --git a/src/sctp_server.erl b/src/sctp_server.erl index 06a9888..7f12878 100644 --- a/src/sctp_server.erl +++ b/src/sctp_server.erl @@ -63,6 +63,7 @@
-type cfg() :: #{laddr => any | string() | inet:ip_address(), lport => inet:port_number(), + sockopts => [gen_sctp:option()], handler => module(), priv => term() }. @@ -114,13 +115,14 @@ handler := Handler, priv := Priv} = Cfg]) -> process_flag(trap_exit, true), + SockOpts = maps:get(sockopts, Cfg, []), %% additional sockopts LAddr = sctp_common:parse_addr(maps:get(laddr, Cfg, any)), {ok, Sock} = gen_sctp:open([{ip, LAddr}, {port, LPort}, {type, seqpacket}, {reuseaddr, true}, {sctp_nodelay, true}, - {active, true}]), + {active, true}] ++ SockOpts), ?LOG_INFO("SCTP server listening on ~p:~p", [LAddr, LPort]), ok = gen_sctp:listen(Sock, true), {ok, #server_state{sock = Sock,