我已经使用以下接口配置了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 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)
编译成功后,我收到IPV6绑定失败错误,出现以下错误编号&名称:
EADDRNOTAVAIL 99 / *无法分配请求的地址
经过一定数量的IPV6绑定尝试后,它会抛出Segmentation Fault错误。
如果有人可以帮我解决我在这里犯的错误,那将会很棒。为什么IPV6绑定失败?
答案 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);