diff options
author | Lennart Poettering <lennart@poettering.net> | 2020-11-18 10:25:27 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2020-12-02 15:14:21 +0100 |
commit | 3132597182c806e5193aebb0b67cdc0f73154a51 (patch) | |
tree | d647d7028a42e23f9f62ba499d5f9c32c84e2e53 /src/basic/socket-util.c | |
parent | 9c2c6692f377e0540b6fcbdb73eac12775c6fad2 (diff) | |
download | systemd-3132597182c806e5193aebb0b67cdc0f73154a51.tar.gz |
socket-util: add sockaddr_in_addr() helper
This extracts the IP address (as union in_addr_union) from a socket
address (i.e. a struct sockaddr).
Diffstat (limited to 'src/basic/socket-util.c')
-rw-r--r-- | src/basic/socket-util.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/basic/socket-util.c b/src/basic/socket-util.c index 48d0718d5d..63ab53b8fc 100644 --- a/src/basic/socket-util.c +++ b/src/basic/socket-util.c @@ -320,7 +320,7 @@ bool socket_address_matches_fd(const SocketAddress *a, int fd) { } int sockaddr_port(const struct sockaddr *_sa, unsigned *ret_port) { - union sockaddr_union *sa = (union sockaddr_union*) _sa; + const union sockaddr_union *sa = (const union sockaddr_union*) _sa; /* Note, this returns the port as 'unsigned' rather than 'uint16_t', as AF_VSOCK knows larger ports */ @@ -345,6 +345,25 @@ int sockaddr_port(const struct sockaddr *_sa, unsigned *ret_port) { } } +const union in_addr_union *sockaddr_in_addr(const struct sockaddr *_sa) { + const union sockaddr_union *sa = (const union sockaddr_union*) _sa; + + if (!sa) + return NULL; + + switch (sa->sa.sa_family) { + + case AF_INET: + return (const union in_addr_union*) &sa->in.sin_addr; + + case AF_INET6: + return (const union in_addr_union*) &sa->in6.sin6_addr; + + default: + return NULL; + } +} + int sockaddr_pretty( const struct sockaddr *_sa, socklen_t salen, |