This commit is contained in:
Evgeny committed 2026-04-15 15:15:15 +03:00
1 parent 1a171d5a24
commit 8bad15b7bb
7 files changed
+91 -19

No files matched your search

+43
View File
@@ -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;
+2 -1
View File
@@ -111,10 +111,11 @@ void debug_enable_console(int enable);
// IP address to string (static buffer, single-threaded)
typedef struct {
char str[48]; // INET6_ADDRSTRLEN(45) + \0
char str[54]; // INET6_ADDRSTRLEN(45) + 6chars (:port) + \0
} ip_str_t;
ip_str_t ip_to_str(const void *addr, int family);// big endian addr
ip_str_t sockaddr_storage_to_str(const struct sockaddr_storage *addr);// автоопределение v4 или v6
// hex dump в лог
void log_dump(const char* prefix, const uint8_t* data, size_t len);
+15
View File
@@ -230,3 +230,18 @@ ssize_t socket_recvfrom(socket_t sock, void* buf, size_t len,
return recvfrom(sock, buf, len, 0, src, src_len);
#endif
}
uint16_t ss_get_port(const struct sockaddr_storage *addr) {
if (!addr) return 0;
if (addr->ss_family == AF_INET) {
const struct sockaddr_in *ipv4 = (const struct sockaddr_in *)addr;
return ntohs(ipv4->sin_port);
}
else if (addr->ss_family == AF_INET6) {
const struct sockaddr_in6 *ipv6 = (const struct sockaddr_in6 *)addr;
return ntohs(ipv6->sin6_port);
}
return 0;
}
+3
View File
@@ -69,4 +69,7 @@ ssize_t socket_recvfrom(socket_t sock, void* buf, size_t len,
// Utility
const char* socket_strerror(int err);
// взять порт из sockaddr_storage
uint16_t ss_get_port(const struct sockaddr_storage *addr);
#endif // SOCKET_COMPAT_H