- IO->DNSOptions.sock_state_cb = SockStateCb;
- IO->DNSOptions.sock_state_cb_data = IO;
- ares_init_options(&IO->DNSChannel, &IO->DNSOptions, optmask);
+ IO->DNS.Options.sock_state_cb = SockStateCb;
+ IO->DNS.Options.sock_state_cb_data = IO;
+ ares_init_options(&IO->DNS.Channel, &IO->DNS.Options, optmask);
+ }
+ IO->DNS.Query->DNSStatus = 0;
+}
+
+static void
+DNStimeouttrigger_callback(struct ev_loop *loop, ev_timer *watcher, int revents)
+{
+ AsyncIO *IO = watcher->data;
+ struct timeval tv, MaxTV;
+ struct timeval *NextTV;
+
+ memset(&MaxTV, 0, sizeof(MaxTV));
+ memset(&tv, 0, sizeof(tv));
+ MaxTV.tv_sec = 30;
+ NextTV = ares_timeout(IO->DNS.Channel, &MaxTV, &tv);
+
+ if ((NextTV->tv_sec != MaxTV.tv_sec) ||
+ (NextTV->tv_usec != MaxTV.tv_usec))
+ {
+ fd_set readers, writers;
+#ifdef DEBUG_CARES
+ EV_syslog(LOG_DEBUG, "C-ARES: %s Timeout!\n", __FUNCTION__);
+#endif
+ FD_ZERO(&readers);
+ FD_ZERO(&writers);
+ ares_fds(IO->DNS.Channel, &readers, &writers);
+ ares_process(IO->DNS.Channel, &readers, &writers);