return buf;
}
-/* Return true if sa is an IPv4 or IPv6 wildcard address. */
-static int
-is_wildcard(struct sockaddr *sa)
-{
- if (sa->sa_family == AF_INET6)
- return IN6_IS_ADDR_UNSPECIFIED(&sa2sin6(sa)->sin6_addr);
- else if (sa->sa_family == AF_INET)
- return sa2sin(sa)->sin_addr.s_addr == INADDR_ANY;
- return 0;
-}
-
/* KDC data. */
enum conn_type {
}
/* Try to turn on pktinfo for UDP wildcard sockets. */
- if (ba->type == UDP && is_wildcard(sock_address)) {
+ if (ba->type == UDP && sa_is_wildcard(sock_address)) {
krb5_klog_syslog(LOG_DEBUG, _("Setting pktinfo on socket %s"),
paddr(sock_address));
ret = set_pktinfo(sock, sock_address->sa_family);
{
struct sockaddr_storage bound_addr;
socklen_t bound_addr_len = sizeof(bound_addr);
+ struct sockaddr *sa = ss2sa(&bound_addr);
- if (getsockname(sock, ss2sa(&bound_addr), &bound_addr_len) < 0)
+ if (getsockname(sock, sa, &bound_addr_len) < 0)
return -1;
- switch (ss2sa(&bound_addr)->sa_family) {
- case AF_INET:
- return ss2sin(&bound_addr)->sin_addr.s_addr == INADDR_ANY;
- case AF_INET6:
- return IN6_IS_ADDR_UNSPECIFIED(&ss2sin6(&bound_addr)->sin6_addr);
- default:
+ if (!sa_is_inet(sa)) {
errno = EINVAL;
return -1;
}
+
+ return sa_is_wildcard(sa);
}
#ifdef HAVE_IP_PKTINFO