summaryrefslogtreecommitdiff
path: root/evdns.c
diff options
context:
space:
mode:
authorYongsheng Xu <chuxdesign@hotmail.com>2021-12-10 11:05:13 +0800
committerYongsheng Xu <chuxdesign@hotmail.com>2021-12-10 11:05:13 +0800
commitcd6a41ecdddc7b2a99a81401858dd2dc6cdc80bb (patch)
tree82e7851b659c3ff5cd43f58d6cc0849ac2795e5f /evdns.c
parent12cedc8a4f3f01dd25d3eaf3b1d602d691233446 (diff)
downloadlibevent-cd6a41ecdddc7b2a99a81401858dd2dc6cdc80bb.tar.gz
feat: add `evdns_base_get_nameserver_fd` method
To get underlying udp socket fd.
Diffstat (limited to 'evdns.c')
-rw-r--r--evdns.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/evdns.c b/evdns.c
index 7e54f241..ee06fdda 100644
--- a/evdns.c
+++ b/evdns.c
@@ -3435,6 +3435,27 @@ done:
return result;
}
+int
+evdns_base_get_nameserver_fd(struct evdns_base *base, int idx)
+{
+ int result = -1;
+ int i;
+ struct nameserver *server;
+ EVDNS_LOCK(base);
+ server = base->server_head;
+ for (i = 0; i < idx && server; ++i, server = server->next) {
+ if (server->next == base->server_head)
+ goto done;
+ }
+ if (! server)
+ goto done;
+ result = server->socket;
+done:
+ EVDNS_UNLOCK(base);
+ return result;
+}
+
+
/* remove from the queue */
static void
evdns_request_remove(struct request *req, struct request **head)