diff options
Diffstat (limited to 'shared/utils.c')
-rw-r--r-- | shared/utils.c | 22 |
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); |