+/**
+ * Task to (re)transmit the DNS query, possibly repeatedly until
+ * we succeed.
+ *
+ * @param cls our `struct GNUNET_DNSSTUB_RequestSocket *`
+ */
+static void
+transmit_query (void *cls)
+{
+ struct GNUNET_DNSSTUB_RequestSocket *rs = cls;
+ struct GNUNET_NETWORK_Handle *ret;
+
+ rs->retry_task = NULL;
+ ret = (NULL != rs->dnsout4) ? rs->dnsout4 : rs->dnsout6;
+ GNUNET_assert (NULL != ret);
+ if (GNUNET_SYSERR ==
+ GNUNET_NETWORK_socket_sendto (ret,
+ rs->request,
+ rs->request_len,
+ (struct sockaddr *) &rs->addr,
+ rs->addrlen))
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ _("Failed to send DNS request to %s\n"),
+ GNUNET_a2s ((struct sockaddr *) &rs->addr,
+ rs->addrlen));
+ else
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ _("Sent DNS request to %s\n"),
+ GNUNET_a2s ((struct sockaddr *) &rs->addr,
+ rs->addrlen));
+ rs->retry_task = GNUNET_SCHEDULER_add_delayed (DNS_RETRANSMIT_DELAY,
+ &transmit_query,
+ rs);
+}
+
+