yinggggggg 2019-02-27 16:45 采纳率: 22.2%
浏览 1482
已结题

centos7 c++ bind ipv6失败,错误码22

用一下代码去bind本机的ipv6地址失败,但是绑定::1和0是可以的

{
        int fd, on(1), res;
        struct sockaddr_in6 addr;
        memset(&addr, 0, sizeof(addr));
        addr.sin6_family = AF_INET6;
        addr.sin6_port = htons(port);
        res = inet_pton(AF_INET6, "fe80::7e3a:9e2a:85e0:a9ae", &addr.sin6_addr);

        fd = socket(AF_INET6, SOCK_STREAM, 0);
        if(fd<0)
            goto Fail;
        res = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
        if(bind(fd, (struct sockaddr*)&addr, sizeof(struct sockaddr_in6))<0)
            goto Fail;
        if(listen(fd, num)<0)
            goto Fail;
        return fd;

    Fail:
        err = errno;
        socket_CloseFd(fd);
        return -1;
    }

本机的ipv6地址如下,不会有错
图片说明

  • 写回答

3条回答 默认 最新

  • colin_que 2019-11-13 09:54
    关注

    server 可以使用 addr.sin6_addr= in6addr_any 进行bind 那么该端口的数据都能收到。
    但是client connect server的 fe80:xxxxxx 的本地链路地址会失败,
    需要给server分配一个全球链路地址 比如 :2001:470:1f01:f52b::2/64
    可以直接给server 手动添加 ip addr add 2001:470:1f01:f52b::2/64 dev eth0
    然后client connect 到这个地址 server和 client 就可以正常进行通信。

    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题