sk->sk_sndbuf
是虚假的, 大小是系统调用SO_SNDBUF设置的,TCP发送缓存的buffer是应用层下发的两倍,发送队列大小该受buffer限制。
但是真实的发送队列sk->sk_wmem_queued
会受到size_goal和skb->len的影响,size_goal
是tp->gso_segs
算出来的,skb->len
是数据包大小。
当数据包未被全部处理完时,写队列里剩余的data会占用sndbuf,sk->sk_wmem_queued+skb->truesize不会受到sk->sk_sndbuf的内存大小限制。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e7cc6205edb221d8fa4df3e7830f0b98.png#pic_center)