源码技术
php
java
python
Linux
当前位置:
首页
>
Linux
>linux内核协议栈之tcp accept流程
linux内核协议栈之tcp accept流程
2026-09-02 18:48:13
linux内核协议栈之tcp accept流程
accept
函数主要是用来接收
tcp
的
connect
请求,当存在
connect
请求时,此函数直接返回,并生成一个新的
sock
,否则会睡眠等待
connect
的到来,其代
码流程
如图
1-
1所示。
图
1-1:函数
__sys_accept4
代码流程图
1.
函数
__sys_accept4
主要调用
__sys_accept4_file
来完成实际工作。
2.
函数
__sys_accept4_file
首先分配一个
newsock
(
struct socket *newsock
),然后生成一个新的
newfile
(
struct file *newfile
),并将其与
newsock
关联,
newsock->file = file
,
file->private_data =
newsock
,接着调用
sock->ops->accept
获取
connect sk
,最后将接收的
sk
对端地址返回给用户。
3.
n
ewsock
分配函数。
4.
f
ile
分配函数,并将其与
newsock
关联在一起。
5.
接收
对端请
求
的连接函数,对
tcp
来说其对应
inet_stream_ops:inet_accept
函数,其代码流程如图
1-
2
所示。
6.
返回对端地址给用户。
7.生成一个新的
fd
来关联新生成的
sock
,并返回给用户。
图1-2:
函数
inet_accept
代码流程图
8.
inet_accept
首先调用
inet_csk_accept
完成对端请求的接收,然后设置新
sock
à
state
状态为
SS_CONNECTED
。
9.
inet_csk_accept
首先查看队列
icsk->icsk_accept_queue
中是否存在连接请求,不存在则等待,存在则直接从队列
icsk->icsk_accept_queue
中取出,返回
newsk
(
struct sock *newsk
)。
10.
判断
icsk->icsk_accept_queue
队列是否为空。
11.
为空则直接在
listen sock
上等待。
12.
从队列
icsk->icsk_accept_queue
取出连接请求。
参
考
l
i
n
u
x
内
核
版
本
:
5
.
7
.
8
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:596563534@qq.com 。
Linux内核7.0来了!新老CPU都能跑得又稳又快
趁着假期把这64页背了,你的Python就牛了!
最新文章
Linux内核7.0来了!新老CPU都能跑得又稳又快
北理工的大佬终于把Python做成了编程APP!
Thonny:Python初学者最好的IDE-下篇
【经验分享】大神写给Python初学者的信 | Python初级、中级、高级学习路线
Linux mmap内存映射将文件映射到内存的高效
Python思维导图知识点大全低分党克星
Linux 网络基础知识与网卡接口配置
基于YOLO26的光伏故障检测系统(Python源码+数据集+Pyside6界面)
30天入门Python(基础篇)——第2天:【变量】与【输出】全解析
零基础也能看懂的Python入门,这篇就够了
热门文章
使用python5年后,我发现学python必看这三本书!少走一半弯路
Python数据分析使用这些库就能搞定
linuxmint从19.3到现在的22.3技术代际与windows哪个系列对等?
Linux高级命令大全(80个)
菜刀linux版-Weevely配置使用
《识质存在》D加密反坑正版!Linux/Steam Deck玩家被锁24小时
夯爆了! 分享一个很强大的Python学习网站
实时Linux内核第二篇:为什么你的 Linux 明明跑得很快,却不一定是“实时”的?
Python collections 全解析:Counter、defaultdict、namedtuple 一篇搞定
Python Polars 分组聚合与窗口分享(二)
随机文章
10个月宝宝每天需要喝多少奶粉?
Python使用 Pyvisa库 控制 NI 设备Fluke 6105A
3分钟搞懂 Python 的 async 异步编程
我们用 YOLO26+ Python 手搓了一套“病虫害检测系统”!!!
【Python程序开发系列】一文搞明白Python常用标准库与第三方库的区别(案例分析)
Linux C编程 | 从0实现telnet获取程序终端控制权
【Python 数据分析】第 1 篇:环境搭建与 NumPy 基础
【第38期】21天养成编程习惯:Python刷题第20天
用 Python 每天自动抓热搜
其实,在手机上也是可以写Python的!
不止黑匣子,更是Linux性能全程的行车记录仪:atop深度解析和实践