util.xmppstream: Optimized stanza building by bypassing the stanza API.
[prosody.git] / core / s2smanager.lua
index 2f561070c9c5221f6462923344284d0b11c12f56..7e6f8135791df3a6d0734fbace1ce92898608223 100644 (file)
@@ -288,7 +288,7 @@ end
 function try_connect(host_session, connect_host, connect_port)
        host_session.connecting = true;
        local handle;
-       handle = adns.lookup(function (reply)
+       handle = adns.lookup(function (reply, err)
                handle = nil;
                host_session.connecting = nil;
                
@@ -306,12 +306,19 @@ function try_connect(host_session, connect_host, connect_port)
                
                if reply and reply[#reply] and reply[#reply].a then
                        log("debug", "DNS reply for %s gives us %s", connect_host, reply[#reply].a);
-                       return make_connect(host_session, reply[#reply].a, connect_port);
+                       local ok, err = make_connect(host_session, reply[#reply].a, connect_port);
+                       if not ok then
+                               if not attempt_connection(host_session, err or "closed") then
+                                       err = err and (": "..err) or "";
+                                       destroy_session(host_session, "Connection failed"..err);
+                               end
+                       end
                else
                        log("debug", "DNS lookup failed to get a response for %s", connect_host);
                        if not attempt_connection(host_session, "name resolution failed") then -- Retry if we can
                                log("debug", "No other records to try for %s - destroying", host_session.to_host);
-                               destroy_session(host_session, "DNS resolution failed"); -- End of the line, we can't
+                               err = err and (": "..err) or "";
+                               destroy_session(host_session, "DNS resolution failed"..err); -- End of the line, we can't
                        end
                end
        end, connect_host, "A", "IN");