Tor源码 -- 启动模块
Tor源码启动模块
- first
- main()函数 -- tor_main.c
- tor_main()函数 -- tor_api.c
- tor_run_main() -- main.c
- int run_tor_main_loop(void)
- do_main_loop()
- run_main_loop_until_done()
- run_main_loop_once()
2021年8月7日
Tor version: tor-0.4.6.6
first
Tor程序的invocation module是/src/app/main/main,c文件。但是,main.c不包含main()函数。<原因> 测试模块时,使用main.c文件(测试模块有自己的main函数)。
所以,Tor程序先启动/src/app/main/tor_main.c模块里的main()函数。
main()函数 – tor_main.c
main()函数有两个变量:
int r;
int restart_count;// 如果设置了ENABLE_RESTART_DEBUGGING,restart_count值为1,否则为0. <说明> 如果启动过程中出错,可以自动重启1次。
调用:
r = tor_main(argc, argv); //调用tor_main()函数
r值为(r < 0 || r > 255),return 1;
r值为(r == 0 && restart_count–),重启 //已设置了ENABLE_RESTART_DEBUGGING
else return r
tor_main()函数 – tor_api.c
path: /src/feature/api/tor_api.c
变量:
tor_main_configuration_t *cfg = tor_main_configuration_new(); // 新建配置变量
tor_main_configuration_set_command_line(cfg, argc, argv);// 将命令行的参数添加到cfg变量中。
调用:
int rv = tor_run_main(cfg); //调用tor_run_main()函数,输入值为cfg变量,目前cfg变量只有命令行的参数数据
tor_run_main() – main.c
path: /src/app/main/main.c
tor_run_main函数主要负责初始化subsystem和运行main loop。
调用: subsystems_init(); //初始化subsystem
两个变量:
static subsys_status_t sys_status[N_SYS_STATUS]; //subsystem 状态值
const subsys_fns_t *tor_subsystems[21]; //目前有21个子系统
<说明>:由于过程较复杂这里不再阐述,有兴趣的读者可以查看下面的模块:
subsystem_list.c
subsysmgr.c subsysmgr.h
/src/lib/subsys/subsys.h
调用run_tor_main_loop()
int run_tor_main_loop(void)
return do_main_loop();
do_main_loop()
return run_main_loop_until_done();
run_main_loop_until_done()
do {loop_result = run_main_loop_once();} while (loop_result == 1);
通过while进行无限循环。
run_main_loop_once()
loop_result = tor_libevent_run_event_loop(tor_libevent_get_base(),called_loop_once);
Tor源码 -- 启动模块相关推荐
- 在docker中编译tor 源码
在docker中编译tor 源码 前言 一.docker中创建自定义镜像及容器 1. 创建镜像的目录并拉取Ubuntu16.04镜像: 2.书写Dockerfile,并build构建镜像 二.编译to ...
- Apache ZooKeeper - 使用源码启动ZK集群模式
文章目录 Pre 配置总览 端口说明 Node 1 [zoo1.cfg ] [myid] Node 2 [zoo2.cfg ] [myid] Node 3 [zoo3.cfg ] [myid] 启动集 ...
- 关于cmake从GitHub上下载的源码启动时报错的问题
关于cmake从GitHub上下载的源码启动时报错的问题: 由于cmake会产生all_build和zero_check两个project,此时需要右击鼠标将需要运行的项目设为启动项,在进行编译,现只 ...
- Java进销存系统源码 采购模块 收货/质检/入库 动态实时库存
Java进销存系统源码 采购模块 收货/质检/入库 动态实时库存 零星采购.一揽子采购.采购计划.合同采购 采购入库.采购退货.杂项入库.生产入库 多库存组织.库存盘点.库存调拨 销售模块 出库 主数 ...
- Nginx源码从模块开发入手,3个项目弄透nginx模块开发丨Linux服务器开发丨C++后端开发丨中间件开发丨分布式丨web服务器
Nginx源码从模块开发入手,3个项目弄透nginx模块开发 1. Nginx http请求的11个处理流程 2. Upstream, Filter,Handler模块分析 3. nginx如何拒绝无 ...
- 【Linux后台开发系列】Nginx源码从模块开发开始,不再对nginx源码陌生丨源码分析
Nginx源码从模块开发开始,不再对nginx源码发怵,值得学习,认真听完. 1. nginx的conf配置,cmd解析 2. nginx模块的八股文 3. nginx开发的细枝末节 [Linu ...
- nginx源码分析—模块及其初始化
Content 0. 序 1. nginx有哪些模块? 2. nginx如何描述这些模块? 2.1 模块数据结构 2.1.1 ngx_module_t结构 2.1.2 ngx_command_t结构 ...
- nginx详细文档 – 安装配置,深入源码,模块编写,编译器参数,系统函数
nginx文档 吴东 April 28, 2009 Contents 1前言 5 2基本配置 7 2.1安装------- 7 2.2配置说明------. 10 2.3启动和控制------ 25 ...
- java wifi模块源码_Wifi模块
一 前言 在上一篇分析了wifi启动的流程,从Android应用层一直分析到了Java框架层,这次我们接着往下走流程.如果没有看上一篇的建议先回头看看 Wifi模块-源码分析Wifi启动1(And ...
- jQuery源码 Ajax模块分析
写在前面: 先讲讲ajax中的相关函数,然后结合函数功能来具体分析源代码. 相关函数: >>ajax全局事件处理程序 .ajaxStart(handler) 注册一个ajaxStart事件 ...
最新文章
- Android RSA加密对象数据
- 安全 - MySQL 出现严重的密码安全漏洞,许多系统存在风险
- 开关电源 误差放大器电路
- DICOM医学图像处理:DICOM存储操作之“多幅BMP图像数据存入DCM文件”
- 数据分析必备工具书:Python官方中文文档
- 【软件工程】软件项目的利益相关者与系统相关人员
- eclipse工具栏sdk和avd图标
- CentOS安装scp命令
- 卷积神经网络中的池化是什么意思
- 谁说格力不做手机了?格力折叠屏手机了解一下
- 基于JAVA+SpringMVC+Mybatis+MYSQL的校园二手自行车交易系统
- java 流常用接口_java 8新特性5--使用集合流式API
- 【LOJ】#2230. 「BJOI2014」大融合
- python设置字符_Python基础教程 将字符串格式设置功能用于字典
- VM虚拟机不被低版本兼容问题
- npm ERR! code ETIMEDOUTnpm ERR! syscall connectnpm ERR! errno ETIMEDOUTnpm ERR! network request t
- Google Chrome 浏览器翻译失败解决办法
- 计算机术语 gc 是什么意思,GC是什么?为什么我们要去使用它
- 基于QT5、C/S(客户端/服务器)架构的MiniQQ项目开发
- Windows Server 2012 R2 系统配置指南_戴有炜编著
热门文章
- 易基因 | 国自然选题——易基因RNA甲基化测序技术(m6A m5C)正热门
- 文献速递 | 通过m6A RNA甲基化修饰调节癌症中的端粒稳态和基因组稳定性
- android,繁体+代码,2013.08.08——— android 汉语言简繁体转换
- html图片从左到右慢慢出来,css 实现一个div的背景颜色从左到右慢慢出现 里面文字颜色也改...
- 磁盘提示:使用驱动器中的光盘之前需要将其格式化怎么办?
- 神经网络过拟合解决方法,神经网络过拟合现象
- linux启动tomcat后,浏览器访问不到
- 散列表(Hash表)
- 打开计算机文件反应慢怎么解决方法,电脑反应慢怎么解决
- Unity UGUI坐标与世界坐标转换