gpt4 book ai didi

sockets - 为什么 Linux 内核有 `struct sock` 和 `struct socket` ?

转载 作者:行者123 更新时间:2023-12-04 04:02:20 25 4
gpt4 key购买 nike

这个问题是 asked before在互联网上,但我找不到一个好的答案。

Linux 内核网络堆栈具有两种结构:

  • struct socket ,一般存储在变量sock
  • struct sock ,一般存储在变量sk

  • 这两种结构本质上是相互关联的,但似乎具有略微不同的生命周期。可以找到 sk通过 sock->sk ,或查找 sock通过 sk->sk_socket .

    为什么有两种结构来存储有关套接字的信息?假设我需要添加一个新字段,我何时将其添加到 struct socket以及何时到 struct sock ?

    更新 : 请注意我指的是 struct socketinclude/linux/net.h在 Linux 源代码中,仅用于内核代码,以及 不是 /usr/include/sys/socket.h这适用于用户空间。

    最佳答案

    struct socket似乎是用于系统调用的更高级别的接口(interface)(这就是为什么它还有指向 struct file 的指针,它在这里表示文件描述符)。
    struct sockAF_INET 的内核实现套接字(还有 struct unix_sock 用于 AF_UNIX 的衍生套接字),内核和用户空间都可以使用(通过 struct sock )。

    两者都是在 1993 年被添加到 Linux 1.0 中的,我怀疑你会找到一个指定初始设计决策的文档。

    关于sockets - 为什么 Linux 内核有 `struct sock` 和 `struct socket` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46295912/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com