单插槽双堆栈 [英] Dual stack with one socket

查看:0
本文介绍了单插槽双堆栈的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发双堆栈客户端-服务器通信。我是古董们: 我是否必须打开两个套接字-一个用于IPv4,一个用于IPv6,或者有一个选项可以打开用于IPv6的套接字,它将能够同时使用IPv4和IPv6连接? 例如,如果我像这样打开一个套接字:

  SOCKET sock = socket(AF_INET6, SOCK_STREAM, 0);

然后调用

 int mode = 0;
  setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&mode, sizeof(mode));
它会同时接受IPv4和IPv6连接吗?如果它接受它,我是否应该修改后续调用,以定义套接字系列,然后根据该系列进行操作? 类似于:

  if (addr->ss_family == AF_INET)
  {

  }
  else if (addr->ss_family == AF_INET6)
  {

  }

感谢提前通知。

IPV6

如果关闭IPV6_V6ONLY,您将在同一套接字上同时获得推荐答案和IPV4映射的IPV6连接。因此,您只需打开单个插座。

显式地将其设置为您想要的值是一个非常好的主意,因为缺省值因操作系统而异,甚至在不同的Linux内核版本之间也不同。(在Linux中,它当前默认为OFF,但以前默认为ON。)

请注意,IPv4映射的IPv6地址将以字符串格式显示,并带有前导::ffff:,例如::ffff:203.0.113.47。您的应用程序需要能够处理此问题。

这篇关于单插槽双堆栈的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆