I've got a sockaddr_storage
containing the ipv4 address and port of a remote host. I haven't seen these struct
s before though and I'm not sure how to cast it into a struct
where I can directly retrieve IP address and port number. I've tried googling the struct
but haven't found anything. Any suggestions on how to do this?
Thanks
You can cast the pointer to struct sockaddr_in *
or struct sockaddr_in6 *
and access the members directly, but that's going to open a can of worms about aliasing violations and miscompilation issues.
A better approach would be to pass the pointer to getnameinfo
with the NI_NUMERICHOST
and NI_NUMERICSERV
flags to get a string representation of the address and port. This has the advantage that it supports both IPv4 and IPv6 with no additional code, and in theory supports all future address types too. You might have to cast the pointer to void *
(or struct sockaddr *
explicitly, if you're using C++) to pass it to getnameinfo
, but this should not cause problems.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With