加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

套接字 – 为什么Linux内核有`struct sock`和`struct socket`?

发布时间:2020-12-13 19:14:06 所属栏目:Linux 来源:网络整理
导读:这个问题在互联网上是 asked before,但我找不到一个好的答案. Linux内核网络堆栈具有两种结构: struct socket ,一般存放在变量袜子中 struct sock ,一般存储在变量sk中 这两种结构基本上是相连的,但似乎寿命略有不同.可以通过sock- sk找到sk,或者通过sk- sk
这个问题在互联网上是 asked before,但我找不到一个好的答案.

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

> struct socket,一般存放在变量袜子中
> struct sock,一般存储在变量sk中

这两种结构基本上是相连的,但似乎寿命略有不同.可以通过sock-> sk找到sk,或者通过sk-> sk_socket找到袜子.

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

更新:请注意我在Linux源代码中的include / linux / net.h中引用struct socket,它仅用于内核代码,而不是用于userland的/usr/include/sys/socket.h.

解决方法

struct socket似乎是一个用于系统调用的更高级别的接口(这就是为什么它还有指向struct file的指针,它在这里表示文件描述符).

struct sock是AF_INET套接字的内核实现(还有用于AF_UNIX套接字的struct unix_sock,它是这个的衍生物),可以由内核和用户空间(通过struct sock)使用.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读