IPV6绑定失败错误:无法分配请求的地址

时间:2016-11-29 15:44:23

标签: linux sockets udp bind ipv6

  1. 我已经使用以下接口配置了Ubuntu Linux系统&分配IPV6地址如下:

    Eth0 :链接封装:以太网HWaddr 00:50:56:8d:57:64
                   inet addr:192.168.254.10 Bcast:0.0.0.0 Mask:255.255.255.0
                   inet6 addr:fe80 :: 250:56ff:fe8d:5764/64范围:链接
              UP BROADCAST RUNNING MULTICAST MTU:1500公制:1
              RX数据包:74231424错误:0丢弃:1超限:0帧:0
              TX数据包:400372550错误:0丢弃:0溢出:0载波:0           碰撞:0 txqueuelen:1000
              RX字节:24514286488(24.5 GB)TX字节:115992171490(115.9 GB)

    Eth1 :链接封装:以太网HWaddr 00:50:56:8d:7c:4c
              inet addr:192.168.1.10 Bcast:0.0.0.0 Mask:255.255.255.0
              inet6 addr:fe80 :: 250:56ff:fe8d:7c4c / 64范围:链接
              inet6 addr:fc00:1234:1 :: 10/120范围:全球
              UP BROADCAST RUNNING MULTICAST MTU:1500公制:1
              RX数据包:434933479错误:0丢弃:1超限:0帧:0
              TX数据包:39666183错误:0丢弃:0超出:0载波:0           碰撞:0 txqueuelen:1000
              RX字节:126065364448(126.0 GB)TX字节:14437801257(14.4 GB)

    Eth2 :链接封装:以太网HWaddr 00:50:56:8d:56:14
              inet addr:192.168.2.10 Bcast:0.0.0.0 Mask:255.255.255.0
              inet6 addr:fc00:1234:2 :: 10/120范围:全球
              inet6 addr:fe80 :: 250:56ff:fe8d:5614/64范围:链接
              UP BROADCAST RUNNING MULTICAST MTU:1500公制:1
              RX数据包:480068741错误:0丢弃:0超限:0帧:0
              TX数据包:34145702错误:0丢弃:0溢出:0载波:0           碰撞:0 txqueuelen:1000
              RX字节:146795537550(146.7 GB)TX字节:10045338657(10.0 GB)

  2. 我想使用IPV6套接字进行Socket编程。我写的代码片段如下:

    struct sockaddr_in6 sin
    Ipv6_fdr = socket(PF_INET6,SOCK_DGRAM,IPPROTO_UDP)

    bzero(& sin,sizeof(sin));
    sin.sin6_family = AF_INET6;
    sin.sin6_port = htons(2152);
          if((setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,& opt,sizeof(int)))< 0)
    memcpy(&(sin.sin6_addr)," fc00:1234:1 :: 10",sizeof(sin.sin6_addr));
          if((bind(sock,(struct sockaddr *)& sin,sizeof(sin)))< 0)

  3. 编译成功后,我收到IPV6绑定失败错误,出现以下错误编号&名称:
    EADDRNOTAVAIL 99 / *无法分配请求的地址 经过一定数量的IPV6绑定尝试后,它会抛出Segmentation Fault错误。

  4. 如果有人可以帮我解决我在这里犯的错误,那将会很棒。为什么IPV6绑定失败?

1 个答案:

答案 0 :(得分:2)

代码中的问题是:

memcpy(&(sin.sin6_addr), "fc00:1234:1::10",sizeof(sin.sin6_addr));

有必要将人类可读的字符串转换为二进制,并将二进制形式的地址存储到sin6_addr,如:

inet_pton (AF_INET6, "fc00:1234:1::10", sin.sin6_addr.s6_addr);