You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IPv6客户端连接IPv6服务器报错无法分配请求地址,是否因无IPv6地址导致?

问题原因

你判断的完全正确,环境无可用IPv6地址就是报错的直接诱因。
你使用的代码是纯IPv6实现:

  • 客户端硬编码连接IPv6环回地址::1
  • 服务端和客户端都用AF_INET6协议族创建套接字
    你当前的Ubuntu Docker环境未启用IPv6支持,系统无法分配IPv6地址发起连接,就会抛出connect(): Cannot assign requested address错误。

解决方案

方案1:启用Docker IPv6支持(无需改代码)

  1. 打开Docker配置:OSX上直接打开Docker Desktop,进入「Settings」-「Docker Engine」配置页
  2. 添加以下配置项:
{
  "ipv6": true,
  "fixed-cidr-v6": "2001:db8:1::/64"
}
  1. 保存配置后重启Docker,重新创建Ubuntu容器,此时运行ip a就能看到::1环回地址,再运行服务端和客户端即可正常交互。

方案2:修改代码适配IPv4(无需改Docker配置)

服务端(server.c)修改点:

  • 所有sockaddr_in6替换为sockaddr_in,AF_INET6替换为AF_INET
  • server_addr.sin6_addr = in6addr_any改为server_addr.sin_addr.s_addr = htonl(INADDR_ANY)
  • 地址字段sin6_addr改为sin_addr,端口字段sin6_port改为sin_port
  • INET6_ADDRSTRLEN替换为INET_ADDRSTRLEN

客户端(client.c)修改点:

  • 所有sockaddr_in6替换为sockaddr_in,AF_INET6替换为AF_INET
  • inet_pton(AF_INET6, "::1", &server_addr.sin6_addr)改为inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr)
  • 端口字段sin6_port改为sin_port

修改完成后重新编译运行,即可正常输出Received b from server。

内容的提问来源于stack exchange,提问作者the_prole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:27:03