diff --git a/src/i_tcp.c b/src/i_tcp.c index 48f04b2be..fef81d05c 100644 --- a/src/i_tcp.c +++ b/src/i_tcp.c @@ -141,6 +141,7 @@ #define MAXBANS 100 #include "i_system.h" +#include "i_time.h" #include "i_net.h" #include "d_net.h" #include "d_netfil.h" @@ -1354,18 +1355,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); }