From 1551e4572d1d948676a424bfed675243ac61ca10 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 21 Aug 2022 03:45:55 -0700 Subject: [PATCH] Do not query DNS for holepunchserver more than once per tic --- src/i_tcp.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/i_tcp.c b/src/i_tcp.c index f642313f..e4bf4ef0 100644 --- a/src/i_tcp.c +++ b/src/i_tcp.c @@ -175,6 +175,7 @@ static UINT8 UPNP_support = TRUE; #endif // !NONET #include "i_system.h" +#include "i_time.h" #include "i_net.h" #include "d_net.h" #include "d_netfil.h" @@ -1517,18 +1518,29 @@ static void rendezvous(int size) char *host = strtok(addrs, ":"); char *port = strtok(NULL, ":"); - mysockaddr_t rzv; + static mysockaddr_t rzv; + static tic_t refreshtic = (tic_t)-1; - if (SOCK_GetAddr(&rzv.ip4, host, (port ? port : "7777"), false)) + tic_t tic = I_GetTime(); + + if (tic != refreshtic) + { + if (SOCK_GetAddr(&rzv.ip4, host, (port ? port : "7777"), false)) + { + refreshtic = tic; + } + else + { + CONS_Alert(CONS_ERROR, "Failed to contact rendezvous server (%s).\n", + cv_rendezvousserver.string); + } + } + + if (tic == refreshtic) { holepunchpacket->magic = hole_punch_magic; sendto(mysockets[0], doomcom->data, size, 0, &rzv.any, sizeof rzv.ip4); } - else - { - CONS_Alert(CONS_ERROR, "Failed to contact rendezvous server (%s).\n", - cv_rendezvousserver.string); - } free(addrs); }