use*_*136 9 sockets linux-kernel
Linux内核网络堆栈具有两种结构:
struct socket,通常存储在变量中 sockstruct sock,通常存储在变量中 sk这两种结构基本上是相连的,但似乎寿命略有不同.人们可以找到一个sk通道sock->sk,或找到一个sock通道sk->sk_socket.
为什么有两种结构来存储有关套接字的信息?假设我需要添加一个新字段,何时将其添加到struct socket何时struct sock?
UPDATE:请注意,我指的是struct socket在include/linux/net.hLinux源代码,这只是针对内核代码了,里面没有 /usr/include/sys/socket.h这意味着用户空间.
struct socket似乎是一个用于系统调用的更高级别的接口(这就是为什么它还有指向struct file文件描述符的指针).
struct sock是AF_INET套接字的内核实现(也有struct unix_sock针对AF_UNIX它的派生的套接字),可以由内核和用户空间(via struct sock)使用.
两者都在1993年被添加到Linux 1.0中,我怀疑你会找到一个指定初始设计决策的文档.