diff --git a/lib/socket.c b/lib/socket.c index 4ffa0e99e..0b7077f13 100644 --- a/lib/socket.c +++ b/lib/socket.c @@ -217,6 +217,14 @@ static int __ip6_sockaddr2endpoint(endpoint_t *ep, const void *p) { ep->port = ntohs(sin->sin6_port); return 0; } +void endpoint_parse_sockaddr_storage(endpoint_t *ep, struct sockaddr_storage *sa) { + if (sa->ss_family == AF_INET) + __ip4_sockaddr2endpoint(ep, sa); + else if (sa->ss_family == AF_INET6) + __ip6_sockaddr2endpoint(ep, sa); + else + abort(); +} static int __ip4_endpoint2sockaddr(void *p, const endpoint_t *ep) { return __ip4_addrport2sockaddr(p, &ep->address, ep->port); } diff --git a/lib/socket.h b/lib/socket.h index 42a01941e..22900a9a9 100644 --- a/lib/socket.h +++ b/lib/socket.h @@ -211,6 +211,7 @@ int sockaddr_parse_str(sockaddr_t *dst, sockfamily_t *fam, const str *src); int endpoint_parse_any(endpoint_t *, const char *); // address (ip) optional int sockaddr_getaddrinfo(sockaddr_t *a, const char *s); int endpoint_parse_any_getaddrinfo(endpoint_t *d, const char *s); // address (ip or hostname) optional +void endpoint_parse_sockaddr_storage(endpoint_t *, struct sockaddr_storage *); void kernel2endpoint(endpoint_t *ep, const struct re_address *ra); unsigned int sockaddr_hash(const sockaddr_t *);