【问题标题】:I am getting error in IPv6 socket connection我在 IPv6 套接字连接中遇到错误
【发布时间】:2011-09-19 18:53:02
【问题描述】:

我的服务器正在创建一个 IPV6 套接字。

在客户端我正在创建一个 IPV4 套接字。 现在,在客户端的连接 API 中,我传递了 IPV4 和 IPV6 地址结构的套接字描述符。

INET_connect( sock,(SocketAddress *)in6_addr,(int)sizeof( sockaddr_in6 ) ) == 0 )

在哪里

struct sockaddr_in6 in6_addr;

我在连接时遇到错误。是因为这个还是其他原因? 请注意,我的服务器是 IPV6(具有 IPV6 地址)

【问题讨论】:

  • 听起来您只是“决定”使用 IPv6,但并未真正了解 IPv6 是什么,什么可行或不可行。
  • 谢谢杰里米。很高兴你能启发我。无论如何,我只是想知道如果我用 IPV4 创建一个套接字并将作为 IPV6 格式传递的地址转换为 IPV4 格式,那么可能会建立连接。如果我错了,请纠正我。
  • 您可能错了,因为您没有显示转换方式的代码,也没有描述您正在使用的平台。现代操作系统将允许您的 IPv4 客户端与 IPv6 服务器通信(服务器将看到 IP4 映射的 IP6 地址)。如果您使用必要的详细信息编辑您的问题,那么 SO 可能会对您更有帮助。
  • 投票,因为这个问题可能有助于突出某种常见(或不那么常见)的误解
  • “我在连接中遇到错误”不是问题描述。您需要发布 actual 错误消息。此外,返回零的系统调用也不是错误的证据,而是成功的证据。

标签: c tcp ipv6


【解决方案1】:

您必须使用 IPV6 套接字连接到 IPV6 地址,或使用隧道服务将流量从 IPV4 地址转换到 IPV6 地址和从 IPV6 地址转换。

【讨论】:

【解决方案2】:

在客户端我正在创建一个 IPV4 套接字

为什么?不要那样做。如果您的客户端程序创建了一个 AF_INET 套接字(或在仅 ip4 的操作系统上运行),那么您无法在客户端执行任何操作来实现此类连接。

如果您只需要这样做 - 那么应该调整服务器以处理 IPv4 客户端。

服务器可能能够接受来自 ip4 客户端的连接请求 - 但只有当 服务器端 禁用 IPV6_V6ONLY 套接字选项并且显然服务器的操作系统允许时才会发生这种情况。在这种情况下,ip6 服务器将通过 ipv4 映射的 ipv6 地址看到 ip4 客户端。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-16
    • 2011-07-18
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    相关资源
    最近更新 更多