ntpd: try to avoid DNS requests *during* NTP roundtrip. +23 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2009-12-02 23:46:25 +01:00
parent 907647fb15
commit 7cb1d6ccf3

View File

@ -166,6 +166,15 @@ set_next(ntp_peer_t *p, unsigned t)
p->next_action_time = time(NULL) + t; p->next_action_time = time(NULL) + t;
} }
static len_and_sockaddr*
resolve_hostname(ntp_peer_t *p)
{
p->lsa = host2sockaddr(p->hostname, 123);
if (p->lsa)
p->dotted = xmalloc_sockaddr2dotted_noport(&p->lsa->u.sa);
return p->lsa;
}
static void static void
add_peers(char *s) add_peers(char *s)
{ {
@ -174,6 +183,7 @@ add_peers(char *s)
p = xzalloc(sizeof(*p)); p = xzalloc(sizeof(*p));
p->hostname = s; p->hostname = s;
p->dotted = s; p->dotted = s;
resolve_hostname(p);
p->fd = -1; p->fd = -1;
p->msg.m_status = MODE_CLIENT | (NTP_VERSION << 3); p->msg.m_status = MODE_CLIENT | (NTP_VERSION << 3);
p->trustlevel = TRUSTLEVEL_PATHETIC; p->trustlevel = TRUSTLEVEL_PATHETIC;
@ -300,12 +310,10 @@ send_query_to_peer(ntp_peer_t *p)
//TODO: big ntpd uses all IPs, not just 1st, do we need to mimic that? //TODO: big ntpd uses all IPs, not just 1st, do we need to mimic that?
//TODO: periodically re-resolve DNS names? //TODO: periodically re-resolve DNS names?
if (!p->lsa) { if (!p->lsa) {
p->lsa = host2sockaddr(p->hostname, 123); if (!resolve_hostname(p)) {
if (!p->lsa) {
set_next(p, INTERVAL_QUERY_PATHETIC); set_next(p, INTERVAL_QUERY_PATHETIC);
return -1; return -1;
} }
p->dotted = xmalloc_sockaddr2dotted_noport(&p->lsa->u.sa);
} }
family = p->lsa->u.sa.sa_family; family = p->lsa->u.sa.sa_family;