# HG changeset patch
# User Matthew Wild <mwild1@gmail.com>
# Date 1647620217 0
# Node ID 18a3a6218100497765a7980ca0ad1c7743bae25c
# Parent  e132a427991482bbb47cf012ca72a04a9d82dfc5
net.connect: When more targets are immediately available, try them after a delay

RFC 8305

diff -r e132a4279914 -r 18a3a6218100 net/connect.lua
--- a/net/connect.lua	Fri Mar 18 16:16:01 2022 +0000
+++ b/net/connect.lua	Fri Mar 18 16:16:57 2022 +0000
@@ -1,6 +1,7 @@
 local server = require "net.server";
 local log = require "util.logger".init("net.connect");
 local new_id = require "util.id".short;
+local timer = require "util.timer";
 
 -- TODO #1246 Happy Eyeballs
 -- FIXME RFC 6724
@@ -28,7 +29,7 @@
 
 local function attempt_connection(p)
 	p:log("debug", "Checking for targets...");
-	p.target_resolver:next(function (conn_type, ip, port, extra)
+	p.target_resolver:next(function (conn_type, ip, port, extra, more_targets_available)
 		if not conn_type then
 			-- No more targets to try
 			p:log("debug", "No more connection targets to try", p.target_resolver.last_error);
@@ -47,6 +48,14 @@
 		end
 		p.conns[conn] = true;
 		pending_connections_map[conn] = p;
+		if more_targets_available then
+			timer.add_task(0.250, function ()
+				if not p.connected then
+					p:log("debug", "Still not connected, making parallel connection attempt...");
+					attempt_connection(p);
+				end
+			end);
+		end
 	end);
 end