我有一个 sockaddr_storage
包含远程主机的 ipv4 地址和端口。不过,我以前从未见过这些 struct
,而且我不确定如何将其转换为可以直接检索 IP 地址和端口号的 struct
。我试过用谷歌搜索 struct
但没有找到任何东西。有关如何执行此操作的任何建议?
谢谢
最佳答案
您可以将指针转换为 struct sockaddr_in *
或 struct sockaddr_in6 *
并直接访问成员,但这将打开一堆关于别名违规和错误编译的蠕虫病毒问题。
更好的方法是将指针传递给带有 NI_NUMERICHOST
和 NI_NUMERICSERV
标志的 getnameinfo
以获得地址的字符串表示形式,港口。这样做的好处是无需额外代码即可同时支持 IPv4 和 IPv6,并且理论上也支持所有 future 的地址类型。您可能必须将指针强制转换为 void *
(或 struct sockaddr *
,如果您使用的是 C++)以将其传递给 getnameinfo
,但这应该不会造成问题。
关于c - 从 sockaddr_storage 检索 ip 和端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7335738/