From f5c145e9e37103202db27aaed4eb0cd49e9c3808 Mon Sep 17 00:00:00 2001 From: qicosmos Date: Wed, 27 Mar 2024 14:44:04 +0800 Subject: [PATCH] use resolver --- include/ylt/coro_rpc/impl/coro_rpc_server.hpp | 21 ++++++----------- .../standalone/cinatra/coro_http_server.hpp | 23 +++++++------------ src/coro_rpc/tests/test_coro_rpc_server.cpp | 4 ++-- 3 files changed, 17 insertions(+), 31 deletions(-) diff --git a/include/ylt/coro_rpc/impl/coro_rpc_server.hpp b/include/ylt/coro_rpc/impl/coro_rpc_server.hpp index d27464e13..7f37a47d9 100644 --- a/include/ylt/coro_rpc/impl/coro_rpc_server.hpp +++ b/include/ylt/coro_rpc/impl/coro_rpc_server.hpp @@ -308,14 +308,18 @@ class coro_rpc_server_base { ELOGV(INFO, "begin to listen"); using asio::ip::tcp; asio::error_code ec; - auto addr = asio::ip::address::from_string(address_, ec); - if (ec) { + asio::ip::tcp::resolver::query query(address_, std::to_string(port_)); + asio::ip::tcp::resolver resolver(acceptor_.get_executor()); + asio::ip::tcp::resolver::iterator it = resolver.resolve(query, ec); + + asio::ip::tcp::resolver::iterator it_end; + if (ec || it == it_end) { ELOGV(ERROR, "resolve address %s error : %s", address_.data(), ec.message().data()); return coro_rpc::errc::bad_address; } - auto endpoint = tcp::endpoint(addr, port_); + auto endpoint = it->endpoint(); acceptor_.open(endpoint.protocol(), ec); if (ec) { ELOGV(ERROR, "open failed, error : %s", ec.message().data()); @@ -420,13 +424,6 @@ class coro_rpc_server_base { acceptor_close_waiter_.get_future().wait(); } - bool iequal(std::string_view a, std::string_view b) { - return std::equal(a.begin(), a.end(), b.begin(), b.end(), - [](char a, char b) { - return tolower(a) == tolower(b); - }); - } - void init_address(std::string address) { if (size_t pos = address.find(':'); pos != std::string::npos) { auto port_sv = std::string_view(address).substr(pos + 1); @@ -443,10 +440,6 @@ class coro_rpc_server_base { address = address.substr(0, pos); } - if (iequal(address, "localhost")) { - address = "127.0.0.1"; - } - address_ = std::move(address); } diff --git a/include/ylt/standalone/cinatra/coro_http_server.hpp b/include/ylt/standalone/cinatra/coro_http_server.hpp index e9220be48..68fae10fd 100644 --- a/include/ylt/standalone/cinatra/coro_http_server.hpp +++ b/include/ylt/standalone/cinatra/coro_http_server.hpp @@ -1,13 +1,5 @@ #pragma once -#include -#include -#include -#include - -#include "asio/streambuf.hpp" -#include "async_simple/Promise.h" -#include "async_simple/coro/Lazy.h" #include "cinatra/coro_http_client.hpp" #include "cinatra/coro_http_response.hpp" #include "cinatra/coro_http_router.hpp" @@ -518,14 +510,19 @@ class coro_http_server { CINATRA_LOG_INFO << "begin to listen"; using asio::ip::tcp; asio::error_code ec; - auto addr = asio::ip::address::from_string(address_, ec); - if (ec) { + + asio::ip::tcp::resolver::query query(address_, std::to_string(port_)); + asio::ip::tcp::resolver resolver(acceptor_.get_executor()); + asio::ip::tcp::resolver::iterator it = resolver.resolve(query, ec); + + asio::ip::tcp::resolver::iterator it_end; + if (ec || it == it_end) { CINATRA_LOG_ERROR << "bad address: " << address_ << " error: " << ec.message(); return std::errc::bad_address; } - auto endpoint = tcp::endpoint(addr, port_); + auto endpoint = it->endpoint(); acceptor_.open(endpoint.protocol(), ec); if (ec) { CINATRA_LOG_ERROR << "acceptor open failed" @@ -807,10 +804,6 @@ class coro_http_server { address = address.substr(0, pos); } - if (iequal0(address, "localhost")) { - address = "127.0.0.1"; - } - address_ = std::move(address); } diff --git a/src/coro_rpc/tests/test_coro_rpc_server.cpp b/src/coro_rpc/tests/test_coro_rpc_server.cpp index 7bcd75274..866815c23 100644 --- a/src/coro_rpc/tests/test_coro_rpc_server.cpp +++ b/src/coro_rpc/tests/test_coro_rpc_server.cpp @@ -92,13 +92,13 @@ struct CoroServerTester : ServerTester { } { - coro_rpc_server server(1, 9001, "x.x.x"); + coro_rpc_server server(1, 9001, "x.x.x.x"); [[maybe_unused]] auto r = server.async_start(); CHECK(server.get_errc() == coro_rpc::errc::bad_address); } { - coro_rpc_server server(1, "x.x.x:9001"); + coro_rpc_server server(1, "x.x.x.x:9001"); [[maybe_unused]] auto r = server.async_start(); CHECK(server.get_errc() == coro_rpc::errc::bad_address); }