123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- --- a/networking/ntpd.c
- +++ b/networking/ntpd.c
- @@ -251,6 +251,7 @@ typedef struct {
- typedef struct {
- len_and_sockaddr *p_lsa;
- char *p_dotted;
- + char *p_hostname;
- int p_fd;
- int datapoint_idx;
- uint32_t lastpkt_refid;
- @@ -756,8 +757,9 @@ add_peers(const char *s)
- peer_t *p;
-
- p = xzalloc(sizeof(*p));
- - p->p_lsa = xhost2sockaddr(s, 123);
- - p->p_dotted = xmalloc_sockaddr2dotted_noport(&p->p_lsa->u.sa);
- + p->p_hostname = s;
- + p->p_lsa = NULL;
- + p->p_dotted = NULL;
- p->p_fd = -1;
- p->p_xmt_msg.m_status = MODE_CLIENT | (NTP_VERSION << 3);
- p->next_action_time = G.cur_time; /* = set_next(p, 0); */
- @@ -806,6 +808,25 @@ send_query_to_peer(peer_t *p)
- *
- * Uncomment this and use strace to see it in action:
- */
- +
- + /* See if the peer hostname already resolved yet, if not, retry to resolv and return on failure */
- + if (!p->p_lsa)
- + {
- + p->p_lsa = host2sockaddr(p->p_hostname, 123);
- +
- + if (p->p_lsa)
- + {
- + p->p_dotted = xmalloc_sockaddr2dotted_noport(&p->p_lsa->u.sa);
- + VERB1 bb_error_msg("resolved peer %s to %s", p->p_hostname, p->p_dotted);
- + }
- + else
- + {
- + set_next(p, RETRY_INTERVAL);
- + VERB1 bb_error_msg("could not resolve peer %s, skipping", p->p_hostname);
- + return;
- + }
- + }
- +
- #define PROBE_LOCAL_ADDR /* { len_and_sockaddr lsa; lsa.len = LSA_SIZEOF_SA; getsockname(p->query.fd, &lsa.u.sa, &lsa.len); } */
-
- if (p->p_fd == -1) {
|