diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2017-10-28 17:54:24 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2017-10-28 17:56:43 +0200 |
commit | a1e9bc6876f6539805095e9395c604d3675c526d (patch) | |
tree | 8e179a204ebceb2415e9f43e0d0a81f3b48d0bdf | |
parent | ecce3a1999f3c5ded4baebbc0b17c48d80fe2781 (diff) | |
download | busybox-a1e9bc6876f6539805095e9395c604d3675c526d.tar.gz |
ntpd: perform DNS resolution out of send/receive loop - closes 10466
Bad case: send request to server1good.com; then try to resolve server2bad.com -
this fails, and failure takes ~5 secs; then receive server1's
response 5 seconds later. We'll never sync up in this case...
function old new delta
ntpd_main 1079 1106 +27
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | networking/ntpd.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/networking/ntpd.c b/networking/ntpd.c index 4f881eaf9..8f792d16d 100644 --- a/networking/ntpd.c +++ b/networking/ntpd.c @@ -866,10 +866,8 @@ do_sendto(int fd, static void send_query_to_peer(peer_t *p) { - if (!p->p_lsa) { - if (!resolve_peer_hostname(p)) - return; - } + if (!p->p_lsa) + return; /* Why do we need to bind()? * See what happens when we don't bind: @@ -2360,6 +2358,14 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv) int nfds, timeout; double nextaction; + /* Resolve peer names to IPs, if not resolved yet */ + for (item = G.ntp_peers; item != NULL; item = item->link) { + peer_t *p = (peer_t *) item->data; + + if (p->next_action_time <= G.cur_time && !p->p_lsa) + resolve_peer_hostname(p); + } + /* Nothing between here and poll() blocks for any significant time */ nextaction = G.cur_time + 3600; |