summaryrefslogtreecommitdiff
path: root/src/network/dns_socket_handler.cpp
diff options
context:
space:
mode:
authorFlorent Le Coz <louiz@louiz.org>2014-07-09 13:02:37 +0200
committerFlorent Le Coz <louiz@louiz.org>2015-02-23 13:56:08 +0100
commitb86547dc1ef407ca3838444533bc7145e32a0d90 (patch)
tree3aa692def62796a5debe705ebc29d40b311e38cb /src/network/dns_socket_handler.cpp
parenta17135720e77c03e66679852198e46a070d56f4d (diff)
downloadbiboumi-b86547dc1ef407ca3838444533bc7145e32a0d90.tar.gz
biboumi-b86547dc1ef407ca3838444533bc7145e32a0d90.tar.bz2
biboumi-b86547dc1ef407ca3838444533bc7145e32a0d90.tar.xz
biboumi-b86547dc1ef407ca3838444533bc7145e32a0d90.zip
Implement async DNS resolution using c-ares
fix #2533
Diffstat (limited to 'src/network/dns_socket_handler.cpp')
-rw-r--r--src/network/dns_socket_handler.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/network/dns_socket_handler.cpp b/src/network/dns_socket_handler.cpp
new file mode 100644
index 0000000..6563894
--- /dev/null
+++ b/src/network/dns_socket_handler.cpp
@@ -0,0 +1,45 @@
+#include <config.h>
+#ifdef CARES_FOUND
+
+#include <network/dns_socket_handler.hpp>
+#include <network/dns_handler.hpp>
+#include <network/poller.hpp>
+
+#include <ares.h>
+
+DNSSocketHandler::DNSSocketHandler(std::shared_ptr<Poller> poller,
+ const socket_t socket):
+ SocketHandler(poller, socket)
+{
+}
+
+DNSSocketHandler::~DNSSocketHandler()
+{
+}
+
+void DNSSocketHandler::connect()
+{
+}
+
+void DNSSocketHandler::on_recv()
+{
+ // always stop watching send and read events. We will re-watch them if the
+ // next call to ares_fds tell us to
+ this->poller->remove_socket_handler(this->socket);
+ ::ares_process_fd(DNSHandler::instance.get_channel(), this->socket, ARES_SOCKET_BAD);
+}
+
+void DNSSocketHandler::on_send()
+{
+ // always stop watching send and read events. We will re-watch them if the
+ // next call to ares_fds tell us to
+ this->poller->remove_socket_handler(this->socket);
+ ::ares_process_fd(DNSHandler::instance.get_channel(), ARES_SOCKET_BAD, this->socket);
+}
+
+bool DNSSocketHandler::is_connected() const
+{
+ return true;
+}
+
+#endif /* CARES_FOUND */