summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-03-01 14:37:35 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-03-01 14:37:35 +0300
commit28f4131d50477c6c095af5b1990aa9af5011fc48 (patch)
tree72f7016b0a4b9d977d146483af7df409b726a0bb /src
parentExternal components must always provide 'to' attribute (diff)
Resolve all addresses from SRV lookup
Diffstat (limited to 'src')
-rw-r--r--src/xmpp_stream_out.erl18
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().