summaryrefslogtreecommitdiff
path: root/shared/utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'shared/utils.c')
-rw-r--r--shared/utils.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/shared/utils.c b/shared/utils.c
index 6474e30..9bf8cd8 100644
--- a/shared/utils.c
+++ b/shared/utils.c
@@ -141,6 +141,28 @@ void saddr_set_ipv6(struct saddr *saddr, const struct in6_addr *ip,
saddr_set_addrstr(saddr);
}
+void saddr_any_to_loopback(struct saddr *saddr)
+{
+ switch (saddr->st.ss_family) {
+ case AF_INET:
+ if (saddr->in4.sin_addr.s_addr != htonl(INADDR_ANY))
+ return;
+ saddr->in4.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+ break;
+
+ case AF_INET6:
+ if (memcmp(&saddr->in6.sin6_addr, &in6addr_any,
+ sizeof(in6addr_any)))
+ return;
+ saddr->in6.sin6_addr = in6addr_loopback;
+ break;
+
+ default:
+ return;
+ }
+ saddr_set_addrstr(saddr);
+}
+
void saddr_set_addrstr(struct saddr *saddr)
{
// assert_return(saddr);