引言
在 Linux 內核網絡子系統中,struct sk_buff
(簡稱 skb
)是管理網絡數據包的核心數據結構。skb_orphan
作為其生命周期管理的關鍵函數,負責切斷 skb
與所屬 socket 的關聯,確保數據包在復雜處理流程中的獨立性。本文將從代碼實現、版本差異、使用場景等多個維度,深入解析 skb_orphan
的設計與作用。
一、skb_orphan
的核心功能
skb_orphan
的核心目標是 解除 skb
與原 socket 的所有權關系,使其成為“孤兒”。其行為可概括為:
-
釋放 socket 所有權:將
skb->sk
置為NULL
。 -
觸發資源釋放:調用
skb->destructor
回調(如存在),更新 socket 的內存計數。 -
確保獨立性:避免后續操作因殘留的 socket 引用導致錯誤。