~singpolyma/biboumi

ece4b4969b296a3da010fb22768348650e70962d — Florent Le Coz 8 years ago ac6a745
If hostname resolution fails, do not try all possible ports
M louloulibs/network/tcp_socket_handler.cpp => louloulibs/network/tcp_socket_handler.cpp +6 -3
@@ 40,15 40,16 @@ TCPSocketHandler::TCPSocketHandler(std::shared_ptr<Poller> poller):
  SocketHandler(poller, -1),
  use_tls(false),
  connected(false),
  connecting(false)
  connecting(false),
#ifdef CARES_FOUND
  ,resolving(false),
  resolving(false),
  resolved(false),
  resolved4(false),
  resolved6(false),
  cares_addrinfo(nullptr),
  cares_error()
  cares_error(),
#endif
  hostname_resolution_failed(false)
{}

TCPSocketHandler::~TCPSocketHandler()


@@ 109,6 110,7 @@ void TCPSocketHandler::connect(const std::string& address, const std::string& po
          addr_res = this->cares_addrinfo;
          if (!addr_res)
            {
              this->hostname_resolution_failed = true;
              const auto msg = this->cares_error;
              this->close();
              this->on_connection_failed(msg);


@@ 129,6 131,7 @@ void TCPSocketHandler::connect(const std::string& address, const std::string& po
      if (res != 0)
        {
          log_warning("getaddrinfo failed: "s + gai_strerror(res));
          this->hostname_resolution_failed = true;
          this->close();
          this->on_connection_failed(gai_strerror(res));
          return ;

M louloulibs/network/tcp_socket_handler.hpp => louloulibs/network/tcp_socket_handler.hpp +2 -0
@@ 256,6 256,8 @@ protected:
  std::string cares_error;
#endif  // CARES_FOUND

  bool hostname_resolution_failed;

private:
  TCPSocketHandler(const TCPSocketHandler&) = delete;
  TCPSocketHandler(TCPSocketHandler&&) = delete;

M src/irc/irc_client.cpp => src/irc/irc_client.cpp +5 -0
@@ 72,6 72,11 @@ void IrcClient::on_connection_failed(const std::string& reason)
{
  this->bridge->send_xmpp_message(this->hostname, "",
                                  "Connection failed: "s + reason);

  if (this->hostname_resolution_failed)
    while (!this->ports_to_try.empty())
      this->ports_to_try.pop();

  if (this->ports_to_try.empty())
    {
      // Send an error message for all room that the user wanted to join