这个问题在互联网上是
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.