Linux:in6addr_any 并绑定(bind)到特定的 IPv4 地址

标签 linux sockets ipv6

我们需要将 IPv4 套接字移植到 IPv4 和 IPv6。 我想创建一个将绑定(bind)在 6addr_any 中的服务器 IPv6 套接字。 我知道它可以处理 IPv4 请求,但我的问题是我们提供了几个绑定(bind)选项,例如其中之一是绑定(bind)到地址。

我们希望能够处理 IPv4 和 IPv6 请求,这可以通过仅使用 1 个套接字来完成。

何时需要将套接字绑定(bind)到 ipv4 地址,它会改变吗? 我们需要打开新的 ipv4 套接字吗?

有什么建议如何支持它吗?

我希望我的问题有一定道理。 欢迎询问更多详情

最佳答案

如果您使用 V6ONLY=0 创建 IPv6 套接字并绑定(bind)到通配符 IPv6 地址,那么您可以在该单个套接字上同时接受 IPv4 和 IPv6 连接。

如果你想绑定(bind)到显式地址,那么你需要多个套接字:每个地址一个。为要绑定(bind)到的 IPv4 地址创建 IPv4 套接字并为 IPv6 地址创建 IPv6 套接字可能是最简单的方法,尽管您可以对所有内容使用 IPv6 套接字。

在最后一种情况下,您为每个 IPv4 地址创建一个 V6ONLY=0 的 IPv6 套接字,并将其绑定(bind)到映射地址。对于 IPv4 地址 aaa.bbb.ccc.ddd,您将绑定(bind)到 IPv6 地址 ::ffff:aaa.bbb.ccc.ddd(如果您的实现接受此表示法)或else to ::ffff:wwxx:yyzz,其中wwaaa的十六进制表示,xx是十六进制bbb等版本

关于Linux:in6addr_any 并绑定(bind)到特定的 IPv4 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20516423/

相关文章:

linux - 在ss -s中,内核计数器实际计数的是什么?

c - 设计交互式客户端

c++ - CAtlHttpClient - 导航到 IP6 地址似乎不起作用

linux - tinyproxy:如何在 Ubuntu 上手动安装最新版本 1.11.0?

java - "The program ' javac ' can be found...."

linux - Grep 内部从 ls 和 head 返回的文件

linux - 删除Linux中列表变量中的重复项

c++ - socket.h 中::accept 的错误号在哪里

python - HTTP服务器 : "Cannot assign requested address" on localhost vs 127. 0.0.1

linux - 了解 Ubuntu Linux IPv6 输出处理上的 JDK 1.6