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中,我怀疑你会找到一个指定初始设计决策的文档.
总结以上是内存溢出为你收集整理的套接字 – 为什么Linux内核有`struct sock`和`struct socket`?全部内容,希望文章能够帮你解决套接字 – 为什么Linux内核有`struct sock`和`struct socket`?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)