aboutsummaryrefslogtreecommitdiffstats
path: root/src/socket.c
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2020-08-28 18:31:32 +0200
committerpespin <pespin@sysmocom.de>2020-08-31 08:50:42 +0000
commit1a3d24e8a583e0fac171e026bee32fa3ef403a2e (patch)
treef44d96791ade41675b88b57bd73d443af75233ad /src/socket.c
parent4f463c5ccce7527c6a3fd98c7f4a32c68638888a (diff)
socket: Add support for AF_INET6 in osmo_sockaddr_to_str_and_uint()
Diffstat (limited to 'src/socket.c')
-rw-r--r--src/socket.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/socket.c b/src/socket.c
index a5bbddf5..e88af16e 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -983,9 +983,22 @@ size_t osmo_sockaddr_in_to_str_and_uint(char *addr, unsigned int addr_len, uint1
unsigned int osmo_sockaddr_to_str_and_uint(char *addr, unsigned int addr_len, uint16_t *port,
const struct sockaddr *sa)
{
- const struct sockaddr_in *sin = (const struct sockaddr_in *)sa;
- return osmo_sockaddr_in_to_str_and_uint(addr, addr_len, port, sin);
+ const struct sockaddr_in6 *sin6;
+
+ switch (sa->sa_family) {
+ case AF_INET:
+ return osmo_sockaddr_in_to_str_and_uint(addr, addr_len, port,
+ (const struct sockaddr_in *)sa);
+ case AF_INET6:
+ sin6 = (const struct sockaddr_in6 *)sa;
+ if (port)
+ *port = ntohs(sin6->sin6_port);
+ if (addr && inet_ntop(sa->sa_family, &sin6->sin6_addr, addr, addr_len))
+ return strlen(addr);
+ break;
+ }
+ return 0;
}
/*! Initialize a unix domain socket (including bind/connect)