diff --git a/src/resolvers.c b/src/resolvers.c index 1a0020b63..47b0cce44 100644 --- a/src/resolvers.c +++ b/src/resolvers.c @@ -725,7 +725,7 @@ static void resolv_srvrq_cleanup_srv(struct server *srv) ha_free(&srv->hostname_dn); srv->hostname_dn_len = 0; memset(&srv_addr, 0, sizeof(srv_addr)); - /* unset server's addr */ + /* unset server's addr AND port */ server_set_inetaddr(srv, &srv_addr, SERVER_INETADDR_UPDATER_NONE, NULL); srv->flags |= SRV_F_NO_RESOLUTION; diff --git a/src/server.c b/src/server.c index c1301349c..a12f7fe62 100644 --- a/src/server.c +++ b/src/server.c @@ -4597,8 +4597,9 @@ int snr_resolution_cb(struct resolv_requester *requester, struct dns_counters *c if (has_no_ip && !snr_set_srv_down(s)) { struct server_inetaddr srv_addr; - memset(&srv_addr, 0, sizeof(srv_addr)); - /* unset server's addr */ + /* unset server's addr, keep port */ + server_get_inetaddr(s, &srv_addr); + memset(&srv_addr.addr, 0, sizeof(srv_addr.addr)); server_set_inetaddr(s, &srv_addr, SERVER_INETADDR_UPDATER_NONE, NULL); } return 1; @@ -4611,8 +4612,9 @@ int snr_resolution_cb(struct resolv_requester *requester, struct dns_counters *c if (has_no_ip && !snr_set_srv_down(s)) { struct server_inetaddr srv_addr; - memset(&srv_addr, 0, sizeof(srv_addr)); - /* unset server's addr */ + /* unset server's addr, keep port */ + server_get_inetaddr(s, &srv_addr); + memset(&srv_addr.addr, 0, sizeof(srv_addr.addr)); server_set_inetaddr(s, &srv_addr, SERVER_INETADDR_UPDATER_NONE, NULL); } return 0; @@ -4697,8 +4699,9 @@ int snr_resolution_error_cb(struct resolv_requester *requester, int error_code) if (!snr_set_srv_down(s)) { struct server_inetaddr srv_addr; - memset(&srv_addr, 0, sizeof(srv_addr)); - /* unset server's addr */ + /* unset server's addr, keep port */ + server_get_inetaddr(s, &srv_addr); + memset(&srv_addr.addr, 0, sizeof(srv_addr.addr)); server_set_inetaddr(s, &srv_addr, SERVER_INETADDR_UPDATER_NONE, NULL); HA_SPIN_UNLOCK(SERVER_LOCK, &s->lock); resolv_detach_from_resolution_answer_items(requester->resolution, requester);