linux 内核流,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!!\n");

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;

}

明白了吧?

Linux内核源代码解析——TCP状态转移图以及其实现

本文原创为freas_1990,转载请标明出处http://blog.csdn.net/freas_1990/article/details/10223581 TCP状态转移的原理并不高深,但是处理逻 ...

Linux内核源代码解析之——sock&#39;s buffer参数

本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/11539695 关于socket与sock的关系再简单 ...

Linux内核源代码解析之——我与神童聊Linux内核

本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/11619609 我的朋友里,至少有2.5个神童. 有的 ...

Linux内核源代码解析——用户发送数据包的起源之sendto

本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/10162853 Jack:我想知道用户如何把数据发送到 ...

Linux内核源代码情景分析系列

http://blog.sina.com.cn/s/blog_6b94d5680101vfqv.html Linux内核源代码情景分析---第五章 文件系统  5.1 概述 构成一个操作系统最重要的就 ...

Linux内核源代码获取教程

Linux内核源代码获取方法 什么叫Linux 什么叫Linux内核 Linux内核源代码的获取 什么叫Linux? Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UN ...

在windows下解压缩Linux内核源代码出现重复文件原因

在windows下解压缩Linux内核源代码出现重复文件原因 2009年06月30日 13:35 来源:ChinaUnix博客 作者:embededgood 编辑:周荣茂     原因一.因为在Lin ...

Linux内核源代码

说明:只供学习交流 一,目录结构 Linux内核源代码采用树形结构进行组织,非常合理地把功能相关的文件都放在同一个子目录下,使得程序更具有可读性. 二,目录结构 arch目录 arch是archite ...

Linux内核源代码目录树结构

Linux内核源代码目录树结构. arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录.和32位PC相关的代码存放在i386目录下,其中比较重要的包括kernel(内核核心部分).mm(内 ...

随机推荐

DCC Software and Graphics System

After working with DCC software for so many years, I saw the realtime solution went forward so much, ...

【转】XML之命名空间的作用(xmlns)

原文链接:http://blog.csdn.net/zhch152/article/details/8191377 命名空间的作用,下面的内容是转载的,大家可以看看:   问题的出现:XML的元素名字 ...

Java汉字转成汉语拼音工具类

Java汉字转成汉语拼音工具类,需要用到pinyin4j.jar包. import net.sourceforge.pinyin4j.PinyinHelper; import net.sourcefo ...

log4j定义某个类的日志级别

项目引入了定时任务后,当我把已有的定时任务删除后,控制台一直会打出类似于 [org.springframework.scheduling.quartz.LocalDataSourceJobStore] ...

[课堂实践与项目]IOS只能进行简单的加减乘除的没有优先级的计算器

// // LCViewController.m // calculator // // Created by lichan on 13-12-3. // Copyright (c) 2013年 co ...

Redis进阶实践之十 Redis哨兵集群模式

一.引言             上一篇文章我们详细的讲解了Redis的主从集群模式,其实这个集群模式配置很简单,只需要在Slave的节点上进行配置,Master主节点的配置不需要做任何更改,但是有一 ...

并发编程 futuretask

package com.mrbird.api.demoThread.future; import java.util.concurrent.Callable; import java.util.con ...

第52章 撤销端点(Revocation Endpoint) - Identity Server 4 中文文档(v1.0.0)

此端点允许撤消访问令牌(仅限引用令牌)和刷新令牌.它实现了令牌撤销规范(RFC 7009). token 要撤销的令牌(必填) token_type_hint access_token或refresh ...

springboot系列一、springboot产生背景及介绍

一.为什么用Springboot 长期以来 Java 的开发一直让人所诟病: ·Java 项目开发复杂度极其高: · Java 项目的维护非常困难: · 在云时代如何实现项目的快速部署以及快速启动: ...

@RequestParam使用须知

--------------------------siwuxie095                             @RequestParam 使用须知         使用 @Requ ...

你可能感兴趣的:(linux,内核流)