diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-03-01 14:37:35 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-03-01 14:37:35 +0300 |
commit | 28f4131d50477c6c095af5b1990aa9af5011fc48 (patch) | |
tree | 72f7016b0a4b9d977d146483af7df409b726a0bb /src | |
parent | External components must always provide 'to' attribute (diff) |
Resolve all addresses from SRV lookup
Diffstat (limited to 'src')
-rw-r--r-- | src/xmpp_stream_out.erl | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/xmpp_stream_out.erl b/src/xmpp_stream_out.erl index 6137a587..d84dadf8 100644 --- a/src/xmpp_stream_out.erl +++ b/src/xmpp_stream_out.erl @@ -878,21 +878,23 @@ a_lookup(HostPorts, State) -> HostPortFamilies = [{Host, Port, Family} || {Host, Port} <- HostPorts, Family <- get_address_families(State)], - a_lookup(HostPortFamilies, State, {error, nxdomain}). + a_lookup(HostPortFamilies, State, [], {error, nxdomain}). -spec a_lookup([{inet:hostname(), inet:port_number(), inet:address_family()}], - state(), network_error()) -> {ok, [ip_port()]} | network_error(). -a_lookup([{Host, Port, Family}|HostPortFamilies], State, _) -> + state(), [ip_port()], network_error()) -> {ok, [ip_port()]} | network_error(). +a_lookup([{Host, Port, Family}|HostPortFamilies], State, Acc, Err) -> Timeout = get_dns_timeout(State), Retries = get_dns_retries(State), case a_lookup(Host, Port, Family, Timeout, Retries) of - {error, _} = Err -> - a_lookup(HostPortFamilies, State, Err); + {error, Reason} -> + a_lookup(HostPortFamilies, State, Acc, {error, Reason}); {ok, AddrPorts} -> - {ok, AddrPorts} + a_lookup(HostPortFamilies, State, Acc ++ AddrPorts, Err) end; -a_lookup([], _State, Err) -> - Err. +a_lookup([], _State, [], Err) -> + Err; +a_lookup([], _State, Acc, _) -> + {ok, Acc}. -spec a_lookup(inet:hostname(), inet:port_number(), inet:address_family(), timeout(), integer()) -> {ok, [ip_port()]} | network_error(). |