Software /
code /
prosody
Changeset
1204:dea89234e545
s2smanager: Timeout DNS requests after 60 seconds (or dns_timeout in config)
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Tue, 26 May 2009 21:59:28 +0100 |
parents | 1203:23725bfdeed5 |
children | 1205:23a079f50cab |
files | core/s2smanager.lua |
diffstat | 1 files changed, 14 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/core/s2smanager.lua Tue May 26 21:48:32 2009 +0100 +++ b/core/s2smanager.lua Tue May 26 21:59:28 2009 +0100 @@ -11,6 +11,7 @@ local hosts = hosts; local sessions = sessions; local core_process_stanza = function(a, b) core_process_stanza(a, b); end +local add_task = require "util.timer".add_task; local socket = require "socket"; local format = string.format; local t_insert, t_sort = table.insert, table.sort; @@ -38,6 +39,8 @@ local adns = require "net.adns"; +local dns_timeout = config.get("*", "core", "dns_timeout") or 60; + incoming_s2s = {}; local incoming_s2s = incoming_s2s; @@ -169,8 +172,9 @@ if not err then -- This is our first attempt log("debug", "First attempt to connect to %s, starting with SRV lookup...", to_host); host_session.connecting = true; - local answer = - adns.lookup(function (answer) + local answer, handle; + handle = adns.lookup(function (answer) + handle = nil; host_session.connecting = nil; if answer then log("debug", to_host.." has SRV records, handling..."); @@ -193,6 +197,14 @@ -- Try with SRV, or just the plain hostname if no SRV return try_connect(host_session, connect_host, connect_port); end, "_xmpp-server._tcp."..connect_host..".", "SRV"); + + -- Set handler for DNS timeout + add_task(dns_timeout, function () + if handle then + adns.cancel(handle, true); + end + end); + log("debug", "DNS lookup for %s sent, waiting for response before we can connect", to_host); return true; -- Attempt in progress elseif host_session.srv_hosts and #host_session.srv_hosts > host_session.srv_choice then -- Not our first attempt, and we also have SRV