首页 文章

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

提问于
浏览
0
  • 我已经为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)

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

struct sockaddr_in6罪恶
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)

  • 编译成功后,我收到IPV6绑定失败错误,出现以下错误编号和名称:
    EADDRNOTAVAIL 99 / Cannot assign requested address* .
    经过一定数量的IPV6绑定尝试后,它会抛出Segmentation Fault错误 .

如果有人可以帮我解决我在这里犯的错误以及IPV6绑定失败的原因,那会很棒吗?

1 回答

  • 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);
    

相关问题