Skip to content

Commit c535126

Browse files
authored
Manage ipv6 in get_ip_str function
sockaddr_in (IPv4) is the same size as sockaddr, which is why getnameinfo() is working for IPv4. But sockaddr_in6 (IPv6) is larger than sockaddr, which is why getnameinfo() fails.
1 parent 4895f43 commit c535126

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

src/http_utils.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,9 +244,21 @@ void get_ip_str(
244244
{
245245
if(sa)
246246
{
247+
int addrlen = sizeof(sockaddr_in);
248+
if (AF_INET6 == sa->sa_family)
249+
{
250+
addrlen = sizeof(sockaddr_in6);
251+
}
252+
247253
char to_ret[NI_MAXHOST];
248-
getnameinfo(sa, sizeof (struct sockaddr), to_ret, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);
249-
result = to_ret;
254+
if (0 == getnameinfo(sa, addrlen, to_ret, NI_MAXHOST, NULL, 0, NI_NUMERICHOST))
255+
{
256+
result = to_ret;
257+
}
258+
else
259+
{
260+
result.clear();
261+
}
250262
}
251263
}
252264

0 commit comments

Comments
 (0)