Skip to content

Commit 585d93e

Browse files
authored
Merge pull request #59 from littleangel0309/master
检查IPv6或者IPv4解析的结果
2 parents ff0edf9 + bafd299 commit 585d93e

File tree

4 files changed

+27
-8
lines changed

4 files changed

+27
-8
lines changed

emmy_debugger/include/emmy_debugger/transporter/transporter.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,4 +84,6 @@ class Transporter {
8484
void Run();
8585
virtual void OnDisconnect();
8686
virtual void OnConnect(bool suc);
87+
// helper for both client and server
88+
static bool ParseSocketAddress(const std::string &host, int port, sockaddr_storage *addr, std::string &err);
8789
};

emmy_debugger/src/transporter/socket_client_transporter.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,9 @@ bool SocketClientTransporter::Connect(const std::string& host, int port, std::st
5959
uvClient.data = this;
6060
uv_tcp_init(loop, &uvClient);
6161
struct sockaddr_storage addr;
62-
uv_ip6_addr(host.c_str(), port, (struct sockaddr_in6 *) &addr);// 尝试使用IPv6地址
63-
64-
if (addr.ss_family == AF_UNSPEC) {
65-
uv_ip4_addr(host.c_str(), port, (struct sockaddr_in *) &addr);// 如果失败,改用IPv4地址
62+
bool addr_suc = ParseSocketAddress(host, port, &addr, err);
63+
if (!addr_suc) {
64+
return false;
6665
}
6766

6867
connect_req.data = this;

emmy_debugger/src/transporter/socket_server_transporter.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,9 @@ bool SocketServerTransporter::Listen(const std::string& host, int port, std::str
4949
uvServer.data = this;
5050
uv_tcp_init(loop, &uvServer);
5151
struct sockaddr_storage addr;
52-
uv_ip6_addr(host.c_str(), port, (struct sockaddr_in6 *) &addr);// 尝试使用IPv6地址
53-
54-
if (addr.ss_family == AF_UNSPEC) {
55-
uv_ip4_addr(host.c_str(), port, (struct sockaddr_in *) &addr);// 如果失败,改用IPv4地址
52+
bool addr_suc = ParseSocketAddress(host, port, &addr, err);
53+
if (!addr_suc) {
54+
return false;
5655
}
5756

5857
uv_tcp_bind(&uvServer, reinterpret_cast<const struct sockaddr*>(&addr), 0);

emmy_debugger/src/transporter/transporter.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,3 +244,22 @@ int Transporter::Stop()
244244
running = false;
245245
return 0;
246246
}
247+
248+
bool Transporter::ParseSocketAddress(const std::string &host, int port, sockaddr_storage *addr, std::string &err)
249+
{
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;
253+
}
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;
265+
}

0 commit comments

Comments
 (0)