Skip to content

Commit ac5aa98

Browse files
authored
Merge pull request #68 from Doekin/master
ParseSocketAddress 使用 uv_getaddrinfo 对 host 进行DNS 解析
2 parents 6f8bf46 + 3cfb9a9 commit ac5aa98

File tree

1 file changed

+12
-15
lines changed

1 file changed

+12
-15
lines changed

emmy_debugger/src/transporter/transporter.cpp

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -245,21 +245,18 @@ int Transporter::Stop()
245245
return 0;
246246
}
247247

248-
bool Transporter::ParseSocketAddress(const std::string &host, int port, sockaddr_storage *addr, std::string &err)
248+
bool Transporter::ParseSocketAddress(const std::string &host, int port, sockaddr_storage *addr, std::string &err)
249249
{
250-
const int ip6_addr_res = uv_ip6_addr(host.c_str(), port, reinterpret_cast<sockaddr_in6 *>(addr));// 尝试使用IPv6地址
251-
if (ip6_addr_res == 0) {
252-
return true;
250+
auto const loop = uv_default_loop();
251+
uv_getaddrinfo_t resolver;
252+
int res = uv_getaddrinfo(loop, &resolver, nullptr, host.c_str(),
253+
std::to_string(port).c_str(), nullptr);
254+
if (res != 0) {
255+
err = "Invalid host: ";
256+
err += uv_strerror(res);
257+
return false;
253258
}
254-
255-
const int ip4_addr_res = uv_ip4_addr(host.c_str(), port, reinterpret_cast<sockaddr_in *>(addr));// 如果失败,改用IPv4地址
256-
if (ip4_addr_res == 0) {
257-
return true;
258-
}
259-
260-
err = "Invalid host. IPv6 error: ";
261-
err += uv_strerror(ip6_addr_res);
262-
err += ". IPv4 error: ";
263-
err += uv_strerror(ip4_addr_res);
264-
return false;
259+
memcpy(addr, resolver.addrinfo->ai_addr, resolver.addrinfo->ai_addrlen);
260+
uv_freeaddrinfo(resolver.addrinfo);
261+
return true;
265262
}

0 commit comments

Comments
 (0)