首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有什么方法可以在绑定后更改套接字的族吗?(与IPv6相关的问题)

有什么方法可以在绑定后更改套接字的族吗?(与IPv6相关的问题)
EN

Stack Overflow用户
提问于 2010-10-26 01:48:34
回答 1查看 121关注 0票数 0

我正在尝试改造一个与IPv4兼容的应用程序接口。基本上,API在一个阶段创建一个套接字,然后调用bind()打开一个端口进行侦听。通过传递getaddrinfo()返回的sockaddr来指定端口,并在服务参数中指定端口。随后,调用者可以选择分配多播组,调用在套接字上设置IP_ADD_MEMBERSHIP的API函数。

问题是,对于IPv6 (即,getaddrinfo的家庭提示是AF_UNSPEC而不是以前的AF_INET ),当用户请求IPv4多播组时,IP_ADD_MEMBERSHIP会失败。这是因为系统显然默认在未提供任何提示时提供IPv6地址。

显然,解决方案是提前知道用户将想要指定IPv4还是IPv6多播组。但是,由于我尝试的不是API本身的更改,因此此信息被认为是未知的。

我还有其他选择吗?

我尝试在IP_ADD_MEMBERSHIP之前关闭、重新创建和重新绑定套接字,但我的第二个bind()由于某种原因失败了。(我尝试指定SO_REUSEADDR,但这不起作用。)

有没有办法简单地“解除绑定”一个套接字,然后将它重新绑定到一个新的族?或者只是改变家庭,就这样?

EN

回答 1

Stack Overflow用户

发布于 2010-10-26 02:03:14

不可能。通常的解决方案是保留两个套接字,一个用于AF_INET,一个用于AF_INET6

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

https://stackoverflow.com/questions/4017366

复制
相关文章

相似问题

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