linux - IPV6绑定(bind)失败错误: Cannot assign requested address

标签 linux sockets udp bind ipv6

  1. 我已使用以下接口(interface)配置 Ubuntu Linux 系统并分配 IPV6 地址,如下所示:

    Eth0:链接 encap:以太网 HWaddr 00:50:56:8d:57:64
    inet addr:192.168.254.10 广播:0.0.0.0 掩码:255.255.255.0
    inet6 地址:fe80::250:56ff:fe8d:5764/64 范围:链接
    上行广播运行多播 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:链接 encap:以太网 HWaddr 00:50:56:8d:7c:4c
    inet addr:192.168.1.10 广播:0.0.0.0 掩码:255.255.255.0
    inet6 地址:fe80::250:56ff:fe8d:7c4c/64 范围:链接
    inet6 地址:fc00:1234:1::10/120 范围:全局
    上行广播运行多播 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:链接 encap:以太网 HWaddr 00:50:56:8d:56:14
    inet addr:192.168.2.10 广播:0.0.0.0 掩码:255.255.255.0
    inet6 地址:fc00:1234:2::10/120 范围:全局
    inet6 地址:fe80::250:56ff:fe8d:5614/64 范围:链接
    上行广播运行多播 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 套接字进行套接字编程。我编写的代码片段如下:

    结构 sockaddr_in6 sin
    Ipv6_fdr = 套接字(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 绑定(bind)失败错误,错误号和名称如下:
    EADDRNOTAVAIL 99/* 无法分配请求的地址
    尝试进行一定次数的 IPV6 绑定(bind)后,会抛出段错误错误。

如果有人能帮助我解决我在这里犯的错误以及为什么 IPV6 绑定(bind)失败,那就太好了?

最佳答案

您的代码中的问题在于以下行:

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

关于linux - IPV6绑定(bind)失败错误: Cannot assign requested address,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40869942/

相关文章:

python - python套接字编程: error trying to connect to server

c++ - 为什么可以 boost asio udp 连接抛出 "send: Connection refused"?

casting - 为什么ByteData.view(buffer)抛出NoSuchMethodError:类 'String'没有实例方法 'asByteData'

linux - __attribute__ ((weak)) 不适用于全局变量

linux - TinyX 使用内置的 fbtft 触摸屏驱动程序显示显示,但触摸不起作用

C# 套接字 : Why does socket. LocalEndPoint 更改?

使用 Swing 的 Java 聊天应用程序(概念)

java - 我可以用 Java 进行低级网络编程吗?

linux - 如何获取将接收我在 netfilter LOCAL_IN Hook 中获得的数据包的进程的 pid?

c++ - 错误: "Undefined reference to ' main'"