首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当`addrinfo::ai_addrlen`大于` `sizeof(struct sockaddr)`时怎么办?

当`addrinfo::ai_addrlen`大于` `sizeof(struct sockaddr)`时怎么办?
EN

Stack Overflow用户
提问于 2013-12-02 14:39:47
回答 2查看 668关注 0票数 2

我的代码应该检查getaddrinfo找到的所有地址,并将第一个地址和支持的协议存储在一个sockaddr类型的变量中。然而,碰巧addrinfo::ai_addrlen字段大于sizeof(struct sockaddr),所以我不能直接将其存储在堆栈上,或者可以吗?在这里,正确的做法是复制sizeof(struct sockaddr)字节的内存并忽略其余的内存,还是在堆上分配大小为addrinfo::ai_addrlenstruct sockaddr实例

EN

回答 2

Stack Overflow用户

发布于 2013-12-02 14:50:25

通常根本不复制ai_addr成员;您可以立即将其用作传递给bindconnectgetnameinfo的参数。如果您确实想复制它,struct sockaddr_storage类型的对象是合适的,但这通常是不好的做法。这一切都是历史上的混乱,getaddrinfo的很大一部分目的是通过不自己声明这些类型来避免历史上的混乱。

票数 4
EN

Stack Overflow用户

发布于 2019-03-21 20:50:17

根据family字段的不同,您可以将addrinfo::ai_addr转换为sockaddr_insockaddr_in6,然后sizeof将匹配。否则,您可以只写入从addrinfo::ai_addr开始的addrinfo::ai_addrlen字节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20322273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档