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>
This commit is contained in:
parent
ecce3a1999
commit
a1e9bc6876
@ -866,10 +866,8 @@ do_sendto(int fd,
|
|||||||
static void
|
static void
|
||||||
send_query_to_peer(peer_t *p)
|
send_query_to_peer(peer_t *p)
|
||||||
{
|
{
|
||||||
if (!p->p_lsa) {
|
if (!p->p_lsa)
|
||||||
if (!resolve_peer_hostname(p))
|
return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Why do we need to bind()?
|
/* Why do we need to bind()?
|
||||||
* See what happens when we don't 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;
|
int nfds, timeout;
|
||||||
double nextaction;
|
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 */
|
/* Nothing between here and poll() blocks for any significant time */
|
||||||
|
|
||||||
nextaction = G.cur_time + 3600;
|
nextaction = G.cur_time + 3600;
|
||||||
|
Loading…
Reference in New Issue
Block a user