@@ -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