diff options
author | Florent Le Coz <louiz@louiz.org> | 2014-07-09 13:02:37 +0200 |
---|---|---|
committer | Florent Le Coz <louiz@louiz.org> | 2015-02-23 13:56:08 +0100 |
commit | b86547dc1ef407ca3838444533bc7145e32a0d90 (patch) | |
tree | 3aa692def62796a5debe705ebc29d40b311e38cb /src/network/dns_socket_handler.cpp | |
parent | a17135720e77c03e66679852198e46a070d56f4d (diff) | |
download | biboumi-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.cpp | 45 |
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 */ |