查看源代码 diameter_sctp (diameter v2.4.1)
基于 SCTP 的 Diameter 传输。
此模块使用 gen_sctp
实现基于 SCTP 的 Diameter 传输。它可以被指定为 diameter:add_transport/2
的 transport_module 选项的值,并且实现了 diameter_transport
中记录的行为。
另请参阅
概要
函数
diameter_transport
所需的 start 函数。
类型
-type connect_option() :: {raddr, inet:ip_address()} | {rport, inet:port_number()} | option() | term().
-type match() :: inet:ip_address() | string() | [match()].
-type option() :: {sender, boolean()} | sender | {packet, boolean() | raw} | {message_cb, false | diameter:eval()}.
函数
-spec start({accept, Ref}, #diameter_service{pid :: term(), capabilities :: term(), applications :: term()}, [listen_option()]) -> {ok, pid(), [inet:ip_address()]} when Ref :: diameter:transport_ref(); ({connect, Ref}, #diameter_service{pid :: term(), capabilities :: term(), applications :: term()}, [connect_option()]) -> {ok, pid(), [inet:ip_address()]} when Ref :: diameter:transport_ref().
diameter_transport
所需的 start 函数。
选项 raddr
和 rport
指定连接传输的远程地址和端口,对于监听传输无效:前者是必需的,而后者如果未指定则默认为 3868。可以指定多个 raddr
选项,在这种情况下,相关连接传输会依次尝试每个选项,直到建立关联。
选项 accept
指定监听传输的远程地址,对于连接传输无效。如果指定,则与指定地址不匹配的远程地址会导致关联中止。可以指定多个 accept
选项。未解析为地址的字符串值 Match
将被解释为正则表达式。
选项 unordered
指定是否使用无序交付,整数 N
等效于 N =< OS
,其中 OS
是相关关联上协商的出站流的数量。无论配置如何,发送都在流 0 上排序,直到接收到第二条传入消息,以确保对等方在任何其他消息之前接收到功能交换消息。默认为 false
。
选项 packet
确定如何/是否将传入消息打包到 diameter_packet 记录中。如果为 false
,则消息将作为 binary() 接收。如果为 true
,则作为记录接收,其中 binary() 消息位于 bin
字段中,而 {stream, Id}
元组位于 transport_data
字段中,其中 Id
是接收消息的入站流的标识符。如果为 raw
,则作为记录接收,其中接收到的辅助 sctp_sndrcvinfo 记录位于 transport_data
字段中。默认为 true
。
选项 message_cb
和 sender
的语义与 diameter_tcp(3) 中记录的相同,但 recv
回调的消息参数由 packet
选项指定。
传出 diameter_packet 记录的 transport_data
字段中的 {outstream, Id}
元组设置发送消息的出站流,模数是协商的出站流的数量。任何其他值都会导致后续发送循环遍历所有出站流。
其余选项是 gen_sctp:open/1
接受的任何选项,但选项 mode
、binary
、list
、active
和 sctp_events
除外。请注意,选项 ip
和 port
分别指定本地地址和端口。
可以为多宿主对等方指定多个 ip
选项。如果未指定任何选项,则使用 diameter_service
记录中 Host-IP-Address
的值。对于监听传输,选项 port
默认为 3868,对于连接传输,默认为 0。
警告
小的接收缓冲区可能导致对等方必须重新发送传入消息:设置
inet
选项recbuf
以增加缓冲区大小。小的发送缓冲区可能导致传出消息被丢弃:设置
inet
选项sndbuf
以增加缓冲区大小。