socket API接口(3)- 更深一层的解析 sock_alloc

7 篇文章 1 订阅
订阅专栏
在 net/socket.c 文件中,定义了 sock_alloc ,代码如下:


上几节说过,sock_alloc 是分配inode节点和socket,并将其初始化,最后返回socket。
第536行, 分配一个inode 节点, sock_mnt 是“socket module的内核初始化流程”一节中讲述的在inet_init 中注册的 sock filesystem 。
我们来看看 new_indode_pseudo 都做了些啥操作:
fs/inode.c



从上面这段代码中可以看出,如果这个super_block 有alloc_inode 则调用它,用它分配inode,没有的话则直接从 inode_cachep 中分配。在“socket module的内核初始化流程”中,我们看到,系统通过传参 sock_mnt = kern_mount(&sock_fs_type); 将sb->s_op 设置成了 sock_fs_type。
由于文件系统mount操作比较复杂,就不继续贴代码了。mount 操作会调用fs_type 中的mount接口,即这里的sockfs_mount函数,该函数又相应的注册了一组操作接口即 fs_ops接口,对应这里的sockfs_ops。
即分配inode节点,最终调用的是 sock_alloc_inode

我们来看看 sock_alloc_inode 是如何实现的:


比较重要的是246行,可以看到的是,默认是成inode_cachep中分配,sock_alloc是从 sock_incode_cachep 中分配,而,sock_inode_cachep 也是在 sock_init 中初始化的,我们从上几节知道,sock_inode_cachep 分配的大小是 sizeof(struct socket_alloc),即是ei。

249~263 是socket字段的初始化过程。
264 将ei中的 vfs_node 字段的指针返回,也就是 inode *
好,到此,sock_all中,如何分配inode节点,以及inode对于的socket如何初始化均已经讲过了。

我们接着看sock_alloc 的实现,
540~542 行中的 SOCKET_I (inode)中,取得socket描述符,并检查socket的赋值状况。
同样在 net/socket.c 中有如下定义:

container_of 定义在 include/linux/kernel 中


543~547 inode文件描述符的初始化
549~550 最后返回了socket 描述符

------------------沧海拾遗-------------



嵌入式软件开发笔试面试知识点总结-Linux部分
嵌入式与Linux那些事的博客
01-15 2834
文章目录Linuxinode和文件描述符gcc -O是什么bin文件和elf文件区别介绍下file_operations结构体copy_from_user open read write等常用函数总结openreadwritecopy_to_usercopy_from_user常用Linux指令怎么查看当前进程?怎么执行退出?怎么查看当前路径?Ls 命令执行什么功能? 可以带哪些参数,有什么区别?目录创建用什么命令?创建文件用什么命令?复制文件用什么命令?查看文件内容有哪些命令可以使用?怎么向屏幕输出带空格
模糊测试--强制性安全漏洞发掘
热门推荐
软件性能测试专栏
01-20 2万+
文档分享地址链接:http://pan.baidu.com/share/link?shareid=2723797392&uk=2485812037 密码:r43x 前 言 我知道"人类和鱼类能够和平共处" 。 --George W. Bush, 2000年9月29日 简介 模糊测试的概念至少已经流传了20年,但是直到最近才引起广泛的关注。安全漏洞困扰了许多流行的客户端应用程序
socket
u014211079的专栏
04-08 1202
在内核中,对socket实现了一种虚拟的文件系统(VFS):socketfs。和其它一般文件系统不同,它不能被mount,没有挂载点,而是通过一个静态变量来引用: [ net/socket.c ] static struct vfsmount *sock_mnt __read_mostly; 按照内核要求,定义一个结构来描述文件系统类型,然后在初始化时进行注册。 * 包含文件系统名字:sock
Linux socket系统调用(二)----sock_alloc()
Blue summer的博客
02-22 1776
注:本文分析基于3.10.107内核版本 当我们在进行网络编程时,socket系统调用是必不可少的一个步骤。socket系统调用返回的是一个fd,即一个文件描述符。其实它就只是一个int类型的数值,我们为什么能像操作文件一样进行读写呢?这就是VFS的功劳了,同时协议栈为了适配VFS虚拟文件系统实现了sockfs,最终使得我们可以像操作文件一样操作文件描述符。 而实现socket和文件系统绑定的...
网络编程之即时通信程序(聊天室)------(三)客户端登录
xuemoyao的专栏
10-22 3946
上一节我们讲了即时通信程序的服务端的搭建,今天我们来实现客户端的登录。 就像我们qq登录一样都需要一个唯一的qq号,当然qq号是长久使用的,而我们的这个即时通信程序只是临时的聊天使用,为了区别不同的用户,我们需要用户在使用该程序时注册一个用户名,然后要向固定的IP+端口发送请求,连接服务器。先上个图,然后再开始讲解! 上边已经说了,在登录的时候都需要用户起一个用户名,这个用户名用户当然可以
sock_alloc原理分析,write与send疑问
guoguangwu的专栏
05-22 516
在“linux 内核协议栈原理分析之 tcp 服务器端的 send 过程”这篇博客中提到在sys_socket=>sock_create中调用了sock_alloc函数,但是具体里面做了什么,并没有说明。 现在我们简单讲解下其中的原理。主要是文件系统相关的内容。 struct socket *sock_alloc(void) { struct inode * inode; struct socket * sock; inode = get_empty_inode();//高速缓冲区获取空
linux内核中socket的创建过程源码分析(详细分析)
weixin_30378311的博客
01-29 362
1三个相关数据结构. 关于socket的创建,首先需要分析socket这个结构体,这是整个的核心。 104structsocket{ 105socket_statestate; 106 107kmemcheck_bitfield_begin(type); 108short...
epoll源码解析翻译------说使用了mmap的都是骗子
li_haoren的博客
06-30 1731
本文地址 //https://www.cnblogs.com/l2017/p/10830391.html //https://blog.csdn.net/li_haoren select poll epoll这三个都是对poll机制的封装。 只是select跟poll傻了点 epoll里并没有找到mmap相关的代码。并没有用到内核态内存映射到用户态的技术。但这个技术是存在的。dpdk,跟...
【TCP_IP高级特性解锁】:Go网络编程进阶,net包深度解析
![【TCP_IP高级特性解锁】:Go网络编程进阶,net包深度解析]...在网络通信中,协议是一系列规则和格式标准,用于控制数据的传输。TCP/IP(Transmission Control Protocol/Internet Protocol)是互联
linux netlink详解
白日梦想家霍华特的博客
04-29 562
netlink从用户态到内核态原理解析
SOCKET规范概述
06-18
充分地利用Windows消息驱动机制进行编程
socket系统调用-文件相关
hhhhhyyyyy8的博客
06-03 476
sock_map_fd() 获取文件描述符,创建file结构实例;socket与file绑定,将file结构添加到进程打开的文件指针数组中。 寻思着,根据fd,找到file;根据file找到socket。 E:\linux-4.1.45\linux-4.1.45\net\socket.c static int sock_map_fd(struct socket *sock, int flags) { struct file *newfile; int fd = get_unused_fd_fla
分析socket.c 文件
qq_39790702的博客
09-15 561
分析socket.c文件 下图为linux网络栈实现与ISO/OSI网络栈七层分层之间的对应关系,BSD socket层对应函数集定义在socket.c文件中,其中函数将作为对socket、bind、accept等系统调用的直接下层响应函数。所有的网络调用函数都具有共同的入口函数sys_socket,由该入口函数调用具体的处理函数。Socket.c文件中函数的实现绝大多数都是简单的调用下层函数,而这些下层函数就是af_inet.c文件中定义的函数。 内核对一个系统调用的响应是层层下放的,而传输层才会真正进
alloc_inode()函数中sb->s_op->alloc_inode()指向sock_alloc_inode()过程分析
hhhhhyyyyy8的博客
10-27 483
前面说到在alloc_inode()函数中sb->s_op->alloc_inode()是指向sock_alloc_inode()函数的,关于这个函数指针是在什么时候指向sock_alloc_inode()函数的。 整体过程为: 1. sock_alloc(sock_mnt->mnt_sb) –> new_inode_pseudo() –> alloc_inode...
内核中的UDP socket流程(3)(4)——sock_create
wangpengqi的专栏
06-23 3204
好了,闲话少说。上次看到了sys_socket调用sock_create的地方了。下面开始研究sock_create了。 sys_socket将自己的参数family, type, protocol传给sock_create,而socksock_create的输出值。 retval = sock_create(family, type, protocol, &sock
linux sock结构体,struct socket结构体详解
weixin_42489714的博客
05-14 2051
在内核中为什么要有struct socket结构体呢?struct socket结构体的作用是什么?下面这个图,我觉得可以回答以上两个问题。 由这个图可知,内核中的进程可以通过使用struct socket结构体来访问linux内核中的网络系统中的传输层、网络层、数据链路层。也可以说struct socket是内核中的进程与内核中的网路系统的桥梁。structsocket{socket_sta...
Linux内核协议栈- 创建socket:__sock_create函数调用关系
RToax
04-06 2983
Table of Contents __sock_create函数 结构 socket_state struct socket struct sock struct proto_ops 函数原型 __sock_create security_socket_create call_int_hook socket_create selinux_socket_create so...
sock_init函数分析
chn89的专栏
12-14 3439
内核版本为2.6.35.8 static int __init sock_init(void) @net/socket 该函数比较简单     1,sk_init()// 初始化sock SLAB cathe     2,skb_init() //初始化skb_buff SLAB cache     3,init_inodecache(),//初始化一个socket_allo
socket 建立过程分析
chn89的专栏
12-13 3789
本文参考代码是2.6.35.8     当应用程序调用socket函数时,程序会发生系统调用陷入内核态,最终会执行sys_socket函数,那么sys_socket定于在哪儿呢?     答案是SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) @/net/socket.c 最终会编译成为sys_socket。 s
sock_alloc_file
最新发布
05-18
`sock_alloc_file()` 是 Linux 内核中的一个函数,它用于为一个网络套接字分配一个文件对象。这个函数的原型如下: ```c struct file *sock_alloc_file(struct socket *sock, int flags, const char *dname); ``` ...
写文章

热门文章

  • bufferevent 设置超时 6691
  • 开发一个自己的quic sdk 3093
  • C/C++ 位域定义 3013
  • socket API接口(2)- socket_create 2785
  • libevent http库-使用示例 2533

分类专栏

  • TensorFlow
  • 深度学习 1篇
  • CentOs 7.1 源码TCP部分 7篇
  • libevent 2篇
  • CentOs 7.1 文件系统
  • CentOS 7.1 内存管理
  • C++基础 2篇
  • go语言编程 2篇
  • QUIC 4篇
  • 算法 1篇
  • RTP  6篇
  • webrtc 8篇
  • linux 1篇
  • RTCP 2篇
  • sdp 1篇
  • licode 2篇

最新评论

  • 深度学习-TensorFlow 1.4的安装

    PAW~: 非常感谢,已解决python3.5安装tensorflow1.4的问题,厉害

  • C/C++ 位域定义

    雪山空谷: 谢谢

  • C/C++ 位域定义

    famousQ: 不是数字零 而是字符零,对应的十六进制是0x30 二进制就是00110000

  • C/C++ 位域定义

    雪山空谷: 博主我想问一下,你的笔试题中数值零为何在第一个字节存的是 00110000,谢谢!

  • licode/erizo 转推rtmp时h264帧重排引发崩溃bug排查

    无锡9527: licode 那个pr 是我提的,https://github.com/lynckia/licode/pull/1350/commits

大家在看

  • 酒吧收银系统解决方案——未来之窗行业应用跨平台架构 465
  • Windows Server 远程桌面断开导致锁屏问题及解决方案 1
  • 足浴店+闸机+智能衣柜+门票系统一体化管理系统解决方案——未来之窗行业应用跨平台架构

最新文章

  • 深度学习-TensorFlow 1.4的安装
  • licode/erizo 转推rtmp时h264帧重排引发崩溃bug排查
  • licode/erizo 中 rtcp 的转发与收敛
2020年1篇
2019年12篇
2018年8篇
2017年9篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家防城港玻璃钢雕塑工作室好用的玻璃钢雕塑厂家电话甘南彩色玻璃钢雕塑多少钱安庆景区玻璃钢雕塑批发安阳镂空玻璃钢人物雕塑公司赣州玻璃钢商场美陈杭州大型玻璃钢雕塑价位辽宁玻璃钢雕塑企业儿童主题商场美陈深圳周边商场美陈报价国庆节商场美陈上海商场美陈费用山东超市商场美陈怎么样安徽卡通玻璃钢雕塑工厂仿真玻璃钢雕塑哪里买玻璃钢人物雕塑洗脚图组合式玻璃钢雕塑摆件市场宝鸡专业玻璃钢雕塑泰州玻璃钢花盆花器泉州玻璃钢仿真水果雕塑厂家九江商场美陈石首玻璃钢花盆花器玻璃钢青蛙雕塑雕塑行吗卡通玻璃钢雕塑设计及定制四川大型商场美陈池州玻璃钢雕塑大象山东装饰商场美陈售价西安公园玻璃钢雕塑供应商天门户外玻璃钢雕塑厂家生鲜商场美陈香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化