From 7aa4b350e62d3c145015ca8a5d34ee9a45bc42f3 Mon Sep 17 00:00:00 2001 From: mrb0nk500 Date: Tue, 2 Aug 2022 22:18:07 -0300 Subject: network: Add `addr_to_str()` This function takes a `sockaddr`, along with the length of the `sockaddr`, and creates a string from that address. --- network.c | 13 +++++++++++++ network.h | 2 ++ 2 files changed, 15 insertions(+) diff --git a/network.c b/network.c index 6bfd9d7..f7b5ecb 100644 --- a/network.c +++ b/network.c @@ -5,3 +5,16 @@ #include #include "macros.h" #include "network.h" + +const char *addr_to_str(struct sockaddr *sa, socklen_t len) { + const int family = sa->sa_family; + static char ip[INET6_ADDRSTRLEN]; + char *str = ip; + + switch (family) { + case AF_INET6 : inet_ntop(family, &((struct sockaddr_in6 *)sa)->sin6_addr, ip, len); break; + case AF_INET : inet_ntop(family, &((struct sockaddr_in *)sa)->sin_addr, ip, len); break; + case AF_UNIX : str = ((struct sockaddr_un *)sa)->sun_path; break; + } + return str; +} diff --git a/network.h b/network.h index 3a4904e..671df30 100644 --- a/network.h +++ b/network.h @@ -31,4 +31,6 @@ struct packet { cmd cmd; /* Command. */ }; +extern const char *addr_to_str(struct sockaddr *sa, socklen_t len); + #endif -- cgit v1.2.3-13-gbd6f