diff options
Diffstat (limited to 'src/include/socket-utils.h')
-rw-r--r-- | src/include/socket-utils.h | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/include/socket-utils.h b/src/include/socket-utils.h index e3fa4293b..156663683 100644 --- a/src/include/socket-utils.h +++ b/src/include/socket-utils.h @@ -119,13 +119,17 @@ sa_is_inet(struct sockaddr *sa) return sa->sa_family == AF_INET || sa->sa_family == AF_INET6; } -#if !defined (socklen) -/* socklen_t socklen (struct sockaddr *) */ -# ifdef HAVE_SA_LEN -# define socklen(X) ((X)->sa_len) -# else -# define socklen(X) ((X)->sa_family == AF_INET6 ? (socklen_t) sizeof (struct sockaddr_in6) : (X)->sa_family == AF_INET ? (socklen_t) sizeof (struct sockaddr_in) : (socklen_t) sizeof (struct sockaddr)) -# endif -#endif +/* Return the length of an IPv4 or IPv6 socket structure; abort if it is + * neither. */ +static inline socklen_t +sa_socklen(struct sockaddr *sa) +{ + if (sa->sa_family == AF_INET6) + return sizeof(struct sockaddr_in6); + else if (sa->sa_family == AF_INET) + return sizeof(struct sockaddr_in); + else + abort(); +} #endif /* SOCKET_UTILS_H */ |