{
struct http_client *client = host->client;
struct dns_lookup_settings dns_set;
- struct ip_addr ip, *ips;
+ struct ip_addr *ips;
unsigned int ips_count;
int ret;
- if (net_addr2ip(host->name, &ip) == 0) {
- host->ips_count = 1;
- host->ips = i_new(struct ip_addr, host->ips_count);
- host->ips[0] = ip;
- } else if (client->set.dns_client != NULL) {
+ i_assert(!host->explicit_ip);
+
+ if (client->set.dns_client != NULL) {
http_client_host_debug(host,
"Performing asynchronous DNS lookup");
(void)dns_client_lookup(client->set.dns_client, host->name,
} else {
const char *hostname = host_url->host_name;
+ struct ip_addr ip = host_url->host_ip;
host = hash_table_lookup(client->hosts, hostname);
if (host == NULL) {
hostname = host->name;
hash_table_insert(client->hosts, hostname, host);
- if (host_url->have_host_ip) {
+ if (ip.family != 0 || net_addr2ip(host->name, &ip) == 0) {
host->ips_count = 1;
host->ips = i_new(struct ip_addr, host->ips_count);
- host->ips[0] = host_url->host_ip;
+ host->ips[0] = ip;
+ host->explicit_ip = TRUE;
}
http_client_host_debug(host, "Host created");