I'm reading a book about network programming in C. One of the sample programs (here: https://github.com/codeplea/Hands-On-Network-Programming-with-C/blob/master/chap01/unix_list.c) compares a sa_family type (which is an unsigned integer) to what I'm guessing is an enumerator, AF_INET and AF_INET6. How does this work?
I've been looking at socket.h and ifaddrs.h, but don't see any enums in there.
int main() {
struct ifaddrs *addresses;
if (getifaddrs(&addresses) == -1) {
printf("getifaddrs call failed\n");
return -1;
}
struct ifaddrs *address = addresses;
while(address) {
int family = address->ifa_addr->sa_family;
if (family == AF_INET || family == AF_INET6) {
printf("%s\t", address->ifa_name);
printf("%s\t", family == AF_INET ? "IPv4" : "IPv6");
char ap[100];
const int family_size = family == AF_INET ?
sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6);
getnameinfo(address->ifa_addr,
family_size, ap, sizeof(ap), 0, 0, NI_NUMERICHOST);
printf("\t%s\n", ap);
}
address = address->ifa_next;
}
freeifaddrs(addresses);
return 0;
}
How does line 13 work? if (family == AF_INET || family == AF_INET6)
Thanks!