Don’t use unique_ptr to store dns socket handlers
This commit is contained in:
@@ -68,7 +68,7 @@ void DNSHandler::watch_dns_sockets(std::shared_ptr<Poller>& poller)
|
|||||||
std::remove_if(this->socket_handlers.begin(), this->socket_handlers.end(),
|
std::remove_if(this->socket_handlers.begin(), this->socket_handlers.end(),
|
||||||
[&readers](const auto& dns_socket)
|
[&readers](const auto& dns_socket)
|
||||||
{
|
{
|
||||||
return !FD_ISSET(dns_socket->get_socket(), &readers);
|
return !FD_ISSET(dns_socket.get_socket(), &readers);
|
||||||
}),
|
}),
|
||||||
this->socket_handlers.end());
|
this->socket_handlers.end());
|
||||||
|
|
||||||
@@ -81,8 +81,8 @@ void DNSHandler::watch_dns_sockets(std::shared_ptr<Poller>& poller)
|
|||||||
this->socket_handlers.end(),
|
this->socket_handlers.end(),
|
||||||
[i](const auto& socket_handler)
|
[i](const auto& socket_handler)
|
||||||
{
|
{
|
||||||
return i == socket_handler->get_socket();
|
return i == socket_handler.get_socket();
|
||||||
});
|
});
|
||||||
if (!read && !write) // No need to read or write to it
|
if (!read && !write) // No need to read or write to it
|
||||||
{ // If found, erase it and stop watching it because it is not
|
{ // If found, erase it and stop watching it because it is not
|
||||||
// needed anymore
|
// needed anymore
|
||||||
@@ -95,12 +95,12 @@ void DNSHandler::watch_dns_sockets(std::shared_ptr<Poller>& poller)
|
|||||||
if (it == this->socket_handlers.end())
|
if (it == this->socket_handlers.end())
|
||||||
{
|
{
|
||||||
this->socket_handlers.emplace(this->socket_handlers.begin(),
|
this->socket_handlers.emplace(this->socket_handlers.begin(),
|
||||||
std::make_unique<DNSSocketHandler>(poller, i));
|
poller, i);
|
||||||
it = this->socket_handlers.begin();
|
it = this->socket_handlers.begin();
|
||||||
}
|
}
|
||||||
poller->add_socket_handler(it->get());
|
poller->add_socket_handler(&*it);
|
||||||
if (write)
|
if (write)
|
||||||
poller->watch_send_events(it->get());
|
poller->watch_send_events(&*it);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Cancel previous timer, if any.
|
// Cancel previous timer, if any.
|
||||||
@@ -116,7 +116,7 @@ void DNSHandler::watch_dns_sockets(std::shared_ptr<Poller>& poller)
|
|||||||
[this]()
|
[this]()
|
||||||
{
|
{
|
||||||
for (auto& dns_socket_handler: this->socket_handlers)
|
for (auto& dns_socket_handler: this->socket_handlers)
|
||||||
dns_socket_handler->on_recv();
|
dns_socket_handler.on_recv();
|
||||||
},
|
},
|
||||||
"DNS timeout"));
|
"DNS timeout"));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ private:
|
|||||||
* call to ares_fds. DNSSocketHandlers are added to it or removed from it
|
* call to ares_fds. DNSSocketHandlers are added to it or removed from it
|
||||||
* in the watch_dns_sockets() method
|
* in the watch_dns_sockets() method
|
||||||
*/
|
*/
|
||||||
std::vector<std::unique_ptr<DNSSocketHandler>> socket_handlers;
|
std::vector<DNSSocketHandler> socket_handlers;
|
||||||
ares_channel channel;
|
ares_channel channel;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -17,11 +17,11 @@ class DNSSocketHandler: public SocketHandler
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit DNSSocketHandler(std::shared_ptr<Poller> poller, const socket_t socket);
|
explicit DNSSocketHandler(std::shared_ptr<Poller> poller, const socket_t socket);
|
||||||
~DNSSocketHandler() = default;
|
~DNSSocketHandler();
|
||||||
|
DNSSocketHandler(DNSSocketHandler&&) = default;
|
||||||
|
DNSSocketHandler& operator=(DNSSocketHandler&&) = default;
|
||||||
DNSSocketHandler(const DNSSocketHandler&) = delete;
|
DNSSocketHandler(const DNSSocketHandler&) = delete;
|
||||||
DNSSocketHandler(DNSSocketHandler&&) = delete;
|
|
||||||
DNSSocketHandler& operator=(const DNSSocketHandler&) = delete;
|
DNSSocketHandler& operator=(const DNSSocketHandler&) = delete;
|
||||||
DNSSocketHandler& operator=(DNSSocketHandler&&) = delete;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Just call dns_process_fd, c-ares will do its work of send()ing or
|
* Just call dns_process_fd, c-ares will do its work of send()ing or
|
||||||
|
|||||||
@@ -15,10 +15,10 @@ public:
|
|||||||
socket(socket)
|
socket(socket)
|
||||||
{}
|
{}
|
||||||
virtual ~SocketHandler() {}
|
virtual ~SocketHandler() {}
|
||||||
SocketHandler(const SocketHandler&) = delete;
|
SocketHandler& operator=(SocketHandler&&) = default;
|
||||||
SocketHandler(SocketHandler&&) = delete;
|
SocketHandler(SocketHandler&&) = default;
|
||||||
SocketHandler& operator=(const SocketHandler&) = delete;
|
SocketHandler& operator=(const SocketHandler&) = delete;
|
||||||
SocketHandler& operator=(SocketHandler&&) = delete;
|
SocketHandler(const SocketHandler&) = delete;
|
||||||
|
|
||||||
virtual void on_recv() = 0;
|
virtual void on_recv() = 0;
|
||||||
virtual void on_send() = 0;
|
virtual void on_send() = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user