linux内核TCP 源码分析,Linux内核源代码解析之TCP面向字节流

大家都知道TCP是面向stream,而UDP是面向datagram的。

那,到底什么是stream呢?

我们来看一下以下代码

/* Now we need to check if we have a half built packet. */

if ((skb = tcp_dequeue_partial(sk)) != NULL) {

int hdrlen;

/* IP header + TCP header */

hdrlen = ((unsigned long)skb->h.th - (unsigned long)skb->data)

+ sizeof(struct tcphdr);

/* Add more stuff to the end of skb->len */

if (!(flags & MSG_OOB)) {

copy = min(sk->mss - (skb->len - hdrlen), len);

/* FIXME: this is really a bug. */

if (copy <= 0) {

printk("TCP: **bug**: "copy" <= 0!!

");

copy = 0;

}

memcpy_fromfs(skb->data + skb->len, from, copy);

skb->len += copy;

from += copy;

copied += copy;

len -= copy;

sk->write_seq += copy;

}

if ((skb->len - hdrlen) >= sk->mss ||

(flags & MSG_OOB) ||

!sk->packets_out)

tcp_send_skb(sk, skb);

else

tcp_enqueue_partial(skb, sk);

continue;

}

明白了吧?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值