当接口1上有:: 1时,为什么可以将此套接字绑定到:: 1%2?

金刚鹦鹉

我试图了解sin6_scope_idUNIX C套接字编程中IPv6地址工作方式。具体来说,我编写了此程序尝试绑定::1%2(即使我的环回地址实际上位于接口1上,因此也要绑定到接口2的环回地址)。

我希望这会失败。但是它绑定成功。为什么?

以下是传回的前3个介面ifconfig -a

$ ifconfig -a

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    options=3<RXCSUM,TXCSUM>
    inet6 ::1 prefixlen 128
    inet 127.0.0.1 netmask 0xff000000
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
    nd6 options=1<PERFORMNUD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280

您可以使用以下命令编译该程序:

cc -Wall -Wextra main.c

这是评论源:

#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
    // Allow any IP address on the interface with scope ID of 2.
    const char *hostname = "::1%2";

    // Say we want to bind on port 80 (for http).
    const char *servname = "1337";

    // Store some information about the IP address wanted.
    struct addrinfo hints;

    // Save addresses in here.
    struct addrinfo *addr_list_item = NULL;

    // Tell `getaddrinfo` that we want an address for IPv6 TCP.
    memset(&hints, 0, sizeof(struct addrinfo));
    hints.ai_family = AF_INET6;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;
    if (getaddrinfo(hostname, servname, &hints, &addr_list_item) != 0) {
        printf("Could not read addresses.\n");
        exit(1);
    }

    // Create a socket and bind it to the address we found before. This should fail
    // but for some reason I don't understand it doesn't.
    if (addr_list_item) {
        int sock = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
        if (sock != -1) {
            if (bind(sock, addr_list_item->ai_addr, addr_list_item->ai_addrlen) != -1) {
                printf("Binded succesfully!\n");
            } else {
                perror(NULL);
            }
            close(sock);
        }
    }

    // Release memory.
    freeaddrinfo(addr_list_item);

    return (0);
}
Ortomala Lokni

根据您的Unix版本,%2可能会被忽略。

在某些IBM系统上,文档说:

上面的IPv6文本格式可以包括一个附加的区域指示符(如果以%字符开头)和/或一个附加的前缀长度(如果以/字符开头)。在这些情况下,%或/将被视为空终止符。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当接口1上有:: 1时,为什么可以将此套接字绑定到:: 1%2?

来自分类Dev

为什么在调用 select 时套接字文件描述符参数递增 1?

来自分类Dev

List <接口1和接口2>,没有空接口Interface3:Interface1,Interface2?

来自分类Dev

为什么套接字无限返回-1(errno:104)

来自分类Dev

为什么当程序在正确的端口上侦听,套接字绑定到所有接口时为何“ [Errno 61] Connection拒绝”?

来自分类Dev

键盘上有99%的数字和1%的字母

来自分类Dev

1个物理对象上有多个碰撞位掩码?

来自分类Dev

bulma 在桌面上有 2 行和 2 列,但有 4 行和 1 列

来自分类Dev

内部硬盘上有user1的家目录,而外部硬盘上有user2的家目录?

来自分类Dev

在这个例子中,我可以在 Textview2 之上有 TextView1 吗?

来自分类Dev

XPages性能-同一服务器上有2个应用程序,有1个运行,有1个没有运行

来自分类Dev

在我的CSV文件中,它实际上有15列时显示有1列

来自分类Dev

XPages性能-同一服务器上有2个应用程序,有1个运行,没有1个

来自分类Dev

取反时,“ x = -x”和“ x * = -1”之间在功能上有区别吗?

来自分类Dev

为什么套接字仅发送1KB(425B)数据?

来自分类Dev

在ubuntu 20.04上有2个wifi接口的问题

来自分类Dev

亚像素移动需要边缘上有1个透明像素才能平滑移动

来自分类Dev

Python 3 的 http.server.HTTPServer 在本地主机上有 1 秒的延迟

来自分类Dev

如果页面上有很多,如何更改 1 select 的值

来自分类Dev

只有1个套接字和1个事件-epollin可以epoll_wait()> 1吗?

来自分类Dev

为什么在使用管道时在grep之前需要2>&1

来自分类Dev

接口上的IEquatable <'1>

来自分类Dev

为什么在接口案例1抛出编译时错误,但在案例2个编译成功

来自分类Dev

为什么我们需要在/ dev / null 2>&1中有2>&1?

来自分类Dev

为什么 &v[1] + &v[2] 与 Rust 中的 v[1] + v[2] 具有相同的结果?

来自分类Dev

为什么2/2检查在ec2实例中失败到1/2

来自分类Dev

有人可以向我解释为什么mod(-4)3 = 2而不是1?

来自分类Dev

为什么绑定函数返回-1

来自分类Dev

为什么当我将1除以2时,通常1%2会在JavaScript中产生1的提示?

Related 相关文章

  1. 1

    当接口1上有:: 1时,为什么可以将此套接字绑定到:: 1%2?

  2. 2

    为什么在调用 select 时套接字文件描述符参数递增 1?

  3. 3

    List <接口1和接口2>,没有空接口Interface3:Interface1,Interface2?

  4. 4

    为什么套接字无限返回-1(errno:104)

  5. 5

    为什么当程序在正确的端口上侦听,套接字绑定到所有接口时为何“ [Errno 61] Connection拒绝”?

  6. 6

    键盘上有99%的数字和1%的字母

  7. 7

    1个物理对象上有多个碰撞位掩码?

  8. 8

    bulma 在桌面上有 2 行和 2 列,但有 4 行和 1 列

  9. 9

    内部硬盘上有user1的家目录,而外部硬盘上有user2的家目录?

  10. 10

    在这个例子中,我可以在 Textview2 之上有 TextView1 吗?

  11. 11

    XPages性能-同一服务器上有2个应用程序,有1个运行,有1个没有运行

  12. 12

    在我的CSV文件中,它实际上有15列时显示有1列

  13. 13

    XPages性能-同一服务器上有2个应用程序,有1个运行,没有1个

  14. 14

    取反时,“ x = -x”和“ x * = -1”之间在功能上有区别吗?

  15. 15

    为什么套接字仅发送1KB(425B)数据?

  16. 16

    在ubuntu 20.04上有2个wifi接口的问题

  17. 17

    亚像素移动需要边缘上有1个透明像素才能平滑移动

  18. 18

    Python 3 的 http.server.HTTPServer 在本地主机上有 1 秒的延迟

  19. 19

    如果页面上有很多,如何更改 1 select 的值

  20. 20

    只有1个套接字和1个事件-epollin可以epoll_wait()> 1吗?

  21. 21

    为什么在使用管道时在grep之前需要2>&1

  22. 22

    接口上的IEquatable <'1>

  23. 23

    为什么在接口案例1抛出编译时错误,但在案例2个编译成功

  24. 24

    为什么我们需要在/ dev / null 2>&1中有2>&1?

  25. 25

    为什么 &v[1] + &v[2] 与 Rust 中的 v[1] + v[2] 具有相同的结果?

  26. 26

    为什么2/2检查在ec2实例中失败到1/2

  27. 27

    有人可以向我解释为什么mod(-4)3 = 2而不是1?

  28. 28

    为什么绑定函数返回-1

  29. 29

    为什么当我将1除以2时,通常1%2会在JavaScript中产生1的提示?

热门标签

归档