net.resolvers.service: Fix resolving of targets with multiple IPs
authorKim Alvefur <zash@zash.se>
Sun, 16 Feb 2020 23:48:31 +0100
changeset 10654 324a0c7d1c6a
parent 10653 228277be4a28
child 10655 1196f1e8d178
net.resolvers.service: Fix resolving of targets with multiple IPs Each basic resolver was only used once and not kept around to try any IP addresses but the first one found.
net/resolvers/service.lua
--- a/net/resolvers/service.lua	Sat Feb 15 16:43:18 2020 +0100
+++ b/net/resolvers/service.lua	Sun Feb 16 23:48:31 2020 +0100
@@ -14,14 +14,17 @@
 -- pass it to cb()
 function methods:next(cb)
 	if self.targets then
-		if #self.targets == 0 then
-			cb(nil);
-			return;
+		if not self.resolver then
+			if #self.targets == 0 then
+				cb(nil);
+				return;
+			end
+			local next_target = table.remove(self.targets, 1);
+			self.resolver = basic.new(unpack(next_target, 1, 4));
 		end
-		local next_target = table.remove(self.targets, 1);
-		self.resolver = basic.new(unpack(next_target, 1, 4));
 		self.resolver:next(function (...)
 			if ... == nil then
+				self.resolver = nil;
 				self:next(cb);
 			else
 				cb(...);