I\'m trying to do some IP agnostic coding and as suggested by various sources I tried to use sockaddr_storage. However all the API calls (getaddrinfo, getnameinfo) still dep
I don't generally see the need for struct sockaddr_storage
. It's purpose is to allocate enough space for the sockaddr structure of any given protocol, but how often do you need to do that in IP-version-agnostic code? Generally you call getaddrinfo()
and it gives you a bunch of struct sockaddr *
s, and you don't care whether they're sockaddr_in
or sockaddr_in6
, you just pass them along as-is to bind()
and connect()
(no casting required).
In typical client/server code, the main place I can think of where struct sockaddr_storage
is useful is to reserve space for the second parameter to accept()
. In this case I agree it's ugly to have to cast it to struct sockaddr *
once for accept()
and again for getnameinfo()
. But I can't see a way around those casts. This is C. Structure inheritance always involves lots of casts.