diff --git a/src/ejabberd_option.erl b/src/ejabberd_option.erl index fd056b761..e5b47f01f 100644 --- a/src/ejabberd_option.erl +++ b/src/ejabberd_option.erl @@ -90,8 +90,8 @@ -export([oom_killer/0]). -export([oom_queue/0]). -export([oom_watermark/0]). --export([outgoing_s2s_ipv4_address/0,outgoing_s2s_ipv4_address/1]). --export([outgoing_s2s_ipv6_address/0,outgoing_s2s_ipv6_address/1]). +-export([outgoing_s2s_ipv4_address/0, outgoing_s2s_ipv4_address/1]). +-export([outgoing_s2s_ipv6_address/0, outgoing_s2s_ipv6_address/1]). -export([outgoing_s2s_families/0, outgoing_s2s_families/1]). -export([outgoing_s2s_port/0, outgoing_s2s_port/1]). -export([outgoing_s2s_timeout/0, outgoing_s2s_timeout/1]). diff --git a/src/ejabberd_s2s_out.erl b/src/ejabberd_s2s_out.erl index 4a6d5cb67..ae298b51c 100644 --- a/src/ejabberd_s2s_out.erl +++ b/src/ejabberd_s2s_out.erl @@ -188,14 +188,17 @@ tls_enabled(#{server_host := ServerHost}) -> ejabberd_s2s:tls_enabled(ServerHost). connect_options(Addr, Opts, #{server_host := ServerHost}) -> - Type = get_addr_type(Addr), - Bindaddr = case Type of - inet -> ejabberd_option:outgoing_s2s_ipv4_address(ServerHost); - inet6 -> ejabberd_option:outgoing_s2s_ipv6_address(ServerHost) - end, - case Bindaddr of - undefined -> Opts; - _ -> lists:append([Opts, [{ip, Bindaddr}]]) + BindAddr = case get_addr_type(Addr) of + inet -> + ejabberd_option:outgoing_s2s_ipv4_address(ServerHost); + inet6 -> + ejabberd_option:outgoing_s2s_ipv6_address(ServerHost) + end, + case BindAddr of + undefined -> + Opts; + _ -> + [{ip, BindAddr} | Opts] end. connect_timeout(#{server_host := ServerHost}) -> @@ -329,7 +332,6 @@ code_change(_OldVsn, State, _Extra) -> %%%=================================================================== %%% Internal functions %%%=================================================================== - -spec get_addr_type(inet:ip_address()) -> inet:address_family(). get_addr_type({_, _, _, _}) -> inet; get_addr_type({_, _, _, _, _, _, _, _}) -> inet6.