TCP IPv6服务端使用in6addr_any时同设备客户端无法连接如何解决
解决步骤
- 确认代码修改正确
替换时完全注释或删除原代码2的inet_pton(AF_INET6, addrIp, &serv_addr->sin6_addr);行,再取消代码1serv_addr->sin6_addr = in6addr_any;的注释,避免两行同时生效导致in6addr_any的赋值被覆盖。 - 添加IPV6_V6ONLY socket选项
在socket创建成功后、bind调用前,添加如下代码强制socket仅处理IPv6请求,解决操作系统默认双栈适配导致的监听异常:
int v6only = 1; if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &v6only, sizeof(v6only)) < 0) { close(fd); return -1; }
- 验证客户端连接配置
服务端绑定in6addr_any后会监听本机所有IPv6地址的7770端口,客户端无需修改连接目标,继续使用原fc00::2a4:1ff:fe15:7031地址连接即可。 - 排查系统拦截规则
服务端启动后执行ss -tulpn | grep 7770,确认输出存在:::7770的监听记录,同时检查本地防火墙是否放开了7770端口的IPv6入站权限。
内容的提问来源于stack exchange,提问作者guoyanzhang
相关产品推荐
相关产品推荐

