From 0f22e2e8059c5cb6a097388fda274e5b4d54e192 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 11 May 2026 15:19:19 +0000 Subject: [PATCH] main: Create the source address struct once at startup Signed-off-by: Michael Tremer --- main.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/main.c b/main.c index 22c9ba3..3aea732 100644 --- a/main.c +++ b/main.c @@ -52,6 +52,9 @@ typedef struct ctx { const char* primary; isc_sockaddr_t primary_address; + // Source + isc_sockaddr_t source_address; + // Zones const char** zones; unsigned int num_zones; @@ -250,14 +253,10 @@ static int do_transfer(dns_zone_t* zone, uint32_t serial) { xfrtype = dns_rdatatype_axfr; } - isc_sockaddr_t source; - struct in_addr any = { .s_addr = INADDR_ANY }; - isc_sockaddr_fromin(&source, &any, 0); - // Require at least 10 kBit/s to be transmitted over 5 minutes dns_zone_setminxfrratein(zone, 10240, 300); - dns_xfrin_create(zone, xfrtype, &ctx.primary_address, &source, NULL, + dns_xfrin_create(zone, xfrtype, &ctx.primary_address, &ctx.source_address, NULL, DNS_TRANSPORT_NONE, NULL, ctx.tlsctx_cache, ctx.memctx, &xfrin); // Start the transfer @@ -371,6 +370,9 @@ ERROR: } static void run_loop(void* data) { + struct in_addr any = { + .s_addr = INADDR_ANY, + }; int r; DEBUG("Event loop started\n"); @@ -381,6 +383,9 @@ static void run_loop(void* data) { // Create a zone manager dns_zonemgr_create(ctx.memctx, ctx.netmgr, &ctx.zonemgr); + // Create the source address + isc_sockaddr_fromin(&ctx.source_address, &any, 0); + // Create a view r = dns_view_create(ctx.memctx, ctx.loopmgr, ctx.dispatchmgr, dns_rdataclass_in, "default", &ctx.view); -- 2.47.3