+ assert(ai);
+ assert(ai->ai_addr);
+ assert(ai->ai_addrlen >= offsetof(struct sockaddr, sa_data));
+ assert(ai->ai_addrlen <= sizeof(union sockaddr_union));
+
+ if (!IN_SET(ai->ai_addr->sa_family, AF_INET, AF_INET6)) {
+ log_warning("Failed to find IP address for %s", m->server);
+ return -EHOSTUNREACH;
+ }
+
+ memcpy(&m->server_addr, ai->ai_addr, ai->ai_addrlen);
+ m->server_addr_length = ai->ai_addrlen;
+
+ r = sockaddr_pretty(&m->server_addr.sa, m->server_addr_length, true, &pretty);
+ if (r < 0) {
+ log_warning("Failed to decode address of %s: %s", m->server, strerror(-r));
+ return r;
+ }
+
+ log_debug("Connecting to NTP server %s.", pretty);
+ sd_notifyf(false, "STATUS=Using Time Server %s", pretty);
+
+ r = manager_listen_setup(m);
+ if (r < 0) {
+ log_warning("Failed to setup connection socket: %s", strerror(-r));
+ return r;
+ }
+
+ r = manager_clock_watch_setup(m);
+ if (r < 0) {
+ log_warning("Failed to setup clock watch: %s", strerror(-r));
+ return r;
+ }
+
+ return manager_send_request(m);