~singpolyma/biboumi

5328d0806fdc5becb9344b4d4320787a2b7c0712 — louiz’ 8 years ago 9fb2e11
Don’t use unique_ptr to store dns socket handlers
M louloulibs/network/dns_handler.cpp => louloulibs/network/dns_handler.cpp +7 -7
@@ 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(),
                     [&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());



@@ 81,8 81,8 @@ void DNSHandler::watch_dns_sockets(std::shared_ptr<Poller>& poller)
                             this->socket_handlers.end(),
                             [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 found, erase it and stop watching it because it is not
          // needed anymore


@@ 95,12 95,12 @@ void DNSHandler::watch_dns_sockets(std::shared_ptr<Poller>& poller)
          if (it == this->socket_handlers.end())
            {
              this->socket_handlers.emplace(this->socket_handlers.begin(),
                                            std::make_unique<DNSSocketHandler>(poller, i));
                                            poller, i);
              it = this->socket_handlers.begin();
            }
          poller->add_socket_handler(it->get());
          poller->add_socket_handler(&*it);
          if (write)
            poller->watch_send_events(it->get());
            poller->watch_send_events(&*it);
        }
    }
  // Cancel previous timer, if any.


@@ 116,7 116,7 @@ void DNSHandler::watch_dns_sockets(std::shared_ptr<Poller>& poller)
                                                          [this]()
             {
               for (auto& dns_socket_handler: this->socket_handlers)
                 dns_socket_handler->on_recv();
                 dns_socket_handler.on_recv();
             },
                                                          "DNS timeout"));
    }

M louloulibs/network/dns_handler.hpp => louloulibs/network/dns_handler.hpp +1 -1
@@ 50,7 50,7 @@ private:
   * call to ares_fds.  DNSSocketHandlers are added to it or removed from it
   * in the watch_dns_sockets() method
   */
  std::vector<std::unique_ptr<DNSSocketHandler>> socket_handlers;
  std::vector<DNSSocketHandler> socket_handlers;
  ares_channel channel;
};


M louloulibs/network/dns_socket_handler.hpp => louloulibs/network/dns_socket_handler.hpp +3 -3
@@ 17,11 17,11 @@ class DNSSocketHandler: public SocketHandler
{
public:
  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(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

M louloulibs/network/socket_handler.hpp => louloulibs/network/socket_handler.hpp +3 -3
@@ 15,10 15,10 @@ public:
    socket(socket)
  {}
  virtual ~SocketHandler() {}
  SocketHandler(const SocketHandler&) = delete;
  SocketHandler(SocketHandler&&) = delete;
  SocketHandler& operator=(SocketHandler&&) = default;
  SocketHandler(SocketHandler&&) = default;
  SocketHandler& operator=(const SocketHandler&) = delete;
  SocketHandler& operator=(SocketHandler&&) = delete;
  SocketHandler(const SocketHandler&) = delete;

  virtual void on_recv() = 0;
  virtual void on_send() = 0;