1
This commit is contained in:
1 parent
1a171d5a24
commit
8bad15b7bb
7 files changed
+91
-19
No files matched your search
@@ -57,6 +57,49 @@ ip_str_t ip_to_str(const void *addr, int family) {
|
||||
return result;
|
||||
}
|
||||
|
||||
ip_str_t sockaddr_storage_to_str(const struct sockaddr_storage *addr) {
|
||||
ip_str_t result;
|
||||
result.str[0] = '\0';
|
||||
|
||||
if (!addr) {
|
||||
return result;
|
||||
}
|
||||
|
||||
char ip_buf[INET6_ADDRSTRLEN];
|
||||
ip_buf[0] = '\0';
|
||||
|
||||
uint16_t port = 0;
|
||||
void *src = NULL;
|
||||
|
||||
if (addr->ss_family == AF_INET) {
|
||||
const struct sockaddr_in *ipv4 = (const struct sockaddr_in *)addr;
|
||||
src = (void *)&ipv4->sin_addr;
|
||||
port = ntohs(ipv4->sin_port);
|
||||
}
|
||||
else if (addr->ss_family == AF_INET6) {
|
||||
const struct sockaddr_in6 *ipv6 = (const struct sockaddr_in6 *)addr;
|
||||
src = (void *)&ipv6->sin6_addr;
|
||||
port = ntohs(ipv6->sin6_port);
|
||||
}
|
||||
else {
|
||||
return result;
|
||||
}
|
||||
|
||||
if (!inet_ntop(addr->ss_family, src, ip_buf, sizeof(ip_buf))) {
|
||||
return result;
|
||||
}
|
||||
|
||||
if (addr->ss_family == AF_INET6) {
|
||||
// IPv6 обязательно в []
|
||||
snprintf(result.str, sizeof(result.str), "[%s]:%u", ip_buf, port);
|
||||
} else {
|
||||
snprintf(result.str, sizeof(result.str), "%s:%u", ip_buf, port);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static const struct {
|
||||
const char* name;
|
||||
|
||||
Reference in new issue
Block a user