Skip to content

Commit

Permalink
Merge pull request #11155 from unknownbrackets/ipv6
Browse files Browse the repository at this point in the history
net: Use WSAAddressToString for Windows XP
  • Loading branch information
hrydgard authored Jun 8, 2018
2 parents e4aef72 + df72abc commit 15737c4
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion ext/native/file/fd_util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,17 +141,29 @@ std::string GetLocalIP(int sock) {
memset(&server_addr, 0, sizeof(server_addr));
socklen_t len = sizeof(server_addr);
if (getsockname(sock, (struct sockaddr *)&server_addr, &len) == 0) {
char temp[64];
char temp[64]{};

// We clear the port below for WSAAddressToStringA.
void *addr;
if (server_addr.sa.sa_family == AF_INET6) {
server_addr.ipv6.sin6_port = 0;
addr = &server_addr.ipv6.sin6_addr;
} else {
server_addr.ipv4.sin_port = 0;
addr = &server_addr.ipv4.sin_addr;
}
#ifdef _WIN32
DWORD len = (DWORD)sizeof(temp);
// Windows XP doesn't support inet_ntop.
if (WSAAddressToStringA((struct sockaddr *)&server_addr, sizeof(server_addr), nullptr, temp, &len) == 0) {
return temp;
}
#else
const char *result = inet_ntop(server_addr.sa.sa_family, addr, temp, sizeof(temp));
if (result) {
return result;
}
#endif
}
return "";
}
Expand Down

0 comments on commit 15737c4

Please sign in to comment.