diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/s2smanager.lua | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/core/s2smanager.lua b/core/s2smanager.lua index 75bb5d36..e095a620 100644 --- a/core/s2smanager.lua +++ b/core/s2smanager.lua @@ -142,6 +142,7 @@ function new_outgoing(from_host, to_host) host_session.log = log; end + -- This is the first call, can't fail (the first step is DNS lookup) attempt_connection(host_session); if not host_session.sends2s then @@ -195,7 +196,13 @@ function attempt_connection(host_session, err) log("debug", to_host.." has no SRV records, falling back to A"); end -- Try with SRV, or just the plain hostname if no SRV - return try_connect(host_session, connect_host, connect_port); + local ok, err = try_connect(host_session, connect_host, connect_port); + if not ok then + if not attempt_connection(host_session, err) then + -- No more attempts will be made + destroy_session(host_session); + end + end end, "_xmpp-server._tcp."..connect_host..".", "SRV"); -- Set handler for DNS timeout @@ -239,7 +246,7 @@ function try_connect(host_session, connect_host, connect_port) local success, err = conn:connect(connect_host, connect_port); if not success and err ~= "timeout" then log("warn", "s2s connect() to %s (%s:%d) failed: %s", host_session.to_host, connect_host, connect_port, err); - return false; + return false, err; end local cl = connlisteners_get("xmppserver"); |