+
+static void
+cb_Connect_to_Server(int fd, UNUSED short events)
+{
+ /* Read result of resolver sub-process from pipe and start connection */
+ int i;
+ size_t len;
+ ng_ipaddr_t dest_addrs[4]; /* we can handle at most 3; but we read up to
+ four so we can log the 'more than we can handle'
+ condition */
+
+ LogDebug("Resolver: Got forward lookup callback on fd %d, events %d", fd, events);
+
+ for (i=0; i < MAX_SERVERS; i++) {
+ if (Resolve_Getfd(&Conf_Server[i].res_stat) == fd )
+ break;
+ }
+
+ if( i >= MAX_SERVERS) {
+ /* Ops, no matching server found?! */
+ io_close( fd );
+ LogDebug("Resolver: Got Forward Lookup callback for unknown server!?");
+ return;
+ }
+
+ /* Read result from pipe */
+ len = Resolve_Read(&Conf_Server[i].res_stat, dest_addrs, sizeof(dest_addrs));
+ if (len == 0)
+ return;
+
+ assert((len % sizeof(ng_ipaddr_t)) == 0);
+
+ LogDebug("Got result from resolver: %u structs (%u bytes).", len/sizeof(ng_ipaddr_t), len);
+
+ memset(&Conf_Server[i].dst_addr, 0, sizeof(&Conf_Server[i].dst_addr));
+ if (len > sizeof(ng_ipaddr_t)) {
+ /* more than one address for this hostname, remember them
+ * in case first address is unreachable/not available */
+ len -= sizeof(ng_ipaddr_t);
+ if (len > sizeof(&Conf_Server[i].dst_addr)) {
+ len = sizeof(&Conf_Server[i].dst_addr);
+ Log(LOG_NOTICE, "Notice: Resolver returned more IP Addresses for host than we can handle,"
+ " additional addresses dropped");
+ }
+ memcpy(&Conf_Server[i].dst_addr, &dest_addrs[1], len);
+ }
+ /* connect() */
+ New_Server(i, dest_addrs);
+} /* cb_Read_Forward_Lookup */
+
+
+static void
+cb_Read_Resolver_Result( int r_fd, UNUSED short events )