From Beej’s Guide to Network programming
You can force it to use IPv4 or IPv6 in the ai_family field, or leave it as AF_UNSPEC to use whatever. This is cool because your code can be IP version-agnostic.
As the title says – what would be the disadvantages (or risks, if any) of always using AF_UNSPEC, instead of specifying IPv4 or IPv6?
Or it’s only for one reason – if the version is specified, this will guarantee that this and only this version is supported?
A little background – I think about adding support for IPv6 in client-server (C++) applications and both versions should be supported. So I wondered if it’s fine to use AF_UNSPEC or it’s better to “recognize” the address from the string and use AF_INET6 or AF_INET, depending on the address.
You have to differentiate between client and server applications.
On the client, it is easy: just call
getaddrinfo()and try each of the answers in sequence until you get a connection.On the server, things are a little bit harder:
Even on servers,
getaddrinfo()can be used. There you use the flagAI_PASSIVEin the hints. Then you get results. On these all you’ll have to listen, perhaps enabling theIPV6_V6ONLYflag.accept()should either be done non-blocking or withselect()orpoll()(not sure if the latter is possible).