struct addrinfo {
int ai_flags; // ai_passive, ai_canonname, etc.
int ai_family; // af_inet, af_inet6, af_unspec
int ai_socktype; // sock_stream, sock_dgram
int ai_protocol; // use 0 for "any"
size_t ai_addrlen; // size of ai_addr in bytes
struct sockaddr *ai_addr; // struct sockaddr_in or _in6
char *ai_canonname; // full canonical hostname
struct addrinfo *ai_next; // linked list, next node
};