diff --git a/src/core/dns.c b/src/core/dns.c index 21170cf..ab8ab58 100644 --- a/src/core/dns.c +++ b/src/core/dns.c @@ -949,11 +949,19 @@ dns_check_entry(u8_t i) /* wait longer for the next retry */ entry->tmr = entry->retries; - /* send DNS packet for this entry */ - err = dns_send(entry); - if (err != ERR_OK) { - LWIP_DEBUGF(DNS_DEBUG | LWIP_DBG_LEVEL_WARNING, - ("dns_send returned error: %s\n", lwip_strerr(err))); + if (!ip_addr_isany(&dns_servers[entry->server_idx])) { + /* send DNS packet for this entry */ + err = dns_send(entry); + if (err != ERR_OK) { + LWIP_DEBUGF(DNS_DEBUG | LWIP_DBG_LEVEL_WARNING, + ("dns_send returned error: %s\n", lwip_strerr(err))); + } + } else { + /* DNS server not valid anymore, e.g. PPP netif has been shut down */ + /* call specified callback function if provided */ + dns_call_found(i, NULL); + /* flush this entry */ + entry->state = DNS_STATE_UNUSED; } } break; @@ -1313,8 +1321,15 @@ dns_gethostbyname(const char *hostname, ip_addr_t *addr, dns_found_callback foun return ERR_OK; } - /* queue query with specified callback */ - return dns_enqueue(hostname, hostnamelen, found, callback_arg); + if (!ip_addr_isany_val(dns_servers[0])) { + /* queue query with specified callback */ + return dns_enqueue(hostname, hostnamelen, found, callback_arg); + } else { + /* No (primary) DNS server available */ + /* @todo: IPv6 support... */ + ip_addr_set_any(0, addr); + return ERR_OK; + } } #endif /* LWIP_DNS */