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://img-blog.csdnimg.cn/0a6501c3fa0540b7b90a986edf7cfb9a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAU21va2UwOTAx,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)