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源码 -- 启动模块相关推荐

  1. 在docker中编译tor 源码

    在docker中编译tor 源码 前言 一.docker中创建自定义镜像及容器 1. 创建镜像的目录并拉取Ubuntu16.04镜像: 2.书写Dockerfile,并build构建镜像 二.编译to ...

  2. Apache ZooKeeper - 使用源码启动ZK集群模式

    文章目录 Pre 配置总览 端口说明 Node 1 [zoo1.cfg ] [myid] Node 2 [zoo2.cfg ] [myid] Node 3 [zoo3.cfg ] [myid] 启动集 ...

  3. 关于cmake从GitHub上下载的源码启动时报错的问题

    关于cmake从GitHub上下载的源码启动时报错的问题: 由于cmake会产生all_build和zero_check两个project,此时需要右击鼠标将需要运行的项目设为启动项,在进行编译,现只 ...

  4. Java进销存系统源码 采购模块 收货/质检/入库 动态实时库存

    Java进销存系统源码 采购模块 收货/质检/入库 动态实时库存 零星采购.一揽子采购.采购计划.合同采购 采购入库.采购退货.杂项入库.生产入库 多库存组织.库存盘点.库存调拨 销售模块 出库 主数 ...

  5. Nginx源码从模块开发入手,3个项目弄透nginx模块开发丨Linux服务器开发丨C++后端开发丨中间件开发丨分布式丨web服务器

    Nginx源码从模块开发入手,3个项目弄透nginx模块开发 1. Nginx http请求的11个处理流程 2. Upstream, Filter,Handler模块分析 3. nginx如何拒绝无 ...

  6. 【Linux后台开发系列】Nginx源码从模块开发开始,不再对nginx源码陌生丨源码分析

    Nginx源码从模块开发开始,不再对nginx源码发怵,值得学习,认真听完. 1.  nginx的conf配置,cmd解析 2.  nginx模块的八股文 3.  nginx开发的细枝末节 [Linu ...

  7. nginx源码分析—模块及其初始化

    Content 0. 序 1. nginx有哪些模块? 2. nginx如何描述这些模块? 2.1 模块数据结构 2.1.1 ngx_module_t结构 2.1.2 ngx_command_t结构 ...

  8. nginx详细文档 – 安装配置,深入源码,模块编写,编译器参数,系统函数

    nginx文档 吴东 April 28, 2009 Contents 1前言 5 2基本配置 7 2.1安装------- 7 2.2配置说明------. 10 2.3启动和控制------ 25 ...

  9. java wifi模块源码_Wifi模块

    一 前言 在上一篇分析了wifi启动的流程,从Android应用层一直分析到了Java框架层,这次我们接着往下走流程.如果没有看上一篇的建议先回头看看   Wifi模块-源码分析Wifi启动1(And ...

  10. jQuery源码 Ajax模块分析

    写在前面: 先讲讲ajax中的相关函数,然后结合函数功能来具体分析源代码. 相关函数: >>ajax全局事件处理程序 .ajaxStart(handler) 注册一个ajaxStart事件 ...

最新文章

  1. Android RSA加密对象数据
  2. 安全 - MySQL 出现严重的密码安全漏洞,许多系统存在风险
  3. 开关电源 误差放大器电路
  4. DICOM医学图像处理:DICOM存储操作之“多幅BMP图像数据存入DCM文件”
  5. 数据分析必备工具书:Python官方中文文档
  6. 【软件工程】软件项目的利益相关者与系统相关人员
  7. eclipse工具栏sdk和avd图标
  8. CentOS安装scp命令
  9. 卷积神经网络中的池化是什么意思
  10. 谁说格力不做手机了?格力折叠屏手机了解一下
  11. 基于JAVA+SpringMVC+Mybatis+MYSQL的校园二手自行车交易系统
  12. java 流常用接口_java 8新特性5--使用集合流式API
  13. 【LOJ】#2230. 「BJOI2014」大融合
  14. python设置字符_Python基础教程 将字符串格式设置功能用于字典
  15. VM虚拟机不被低版本兼容问题
  16. npm ERR! code ETIMEDOUTnpm ERR! syscall connectnpm ERR! errno ETIMEDOUTnpm ERR! network request t
  17. Google Chrome 浏览器翻译失败解决办法
  18. 计算机术语 gc 是什么意思,GC是什么?为什么我们要去使用它
  19. 基于QT5、C/S(客户端/服务器)架构的MiniQQ项目开发
  20. Windows Server 2012 R2 系统配置指南_戴有炜编著

热门文章

  1. 易基因 | 国自然选题——易基因RNA甲基化测序技术(m6A m5C)正热门
  2. 文献速递 | 通过m6A RNA甲基化修饰调节癌症中的端粒稳态和基因组稳定性
  3. android,繁体+代码,2013.08.08——— android 汉语言简繁体转换
  4. html图片从左到右慢慢出来,css 实现一个div的背景颜色从左到右慢慢出现 里面文字颜色也改...
  5. 磁盘提示:使用驱动器中的光盘之前需要将其格式化怎么办?
  6. 神经网络过拟合解决方法,神经网络过拟合现象
  7. linux启动tomcat后,浏览器访问不到
  8. 散列表(Hash表)
  9. 打开计算机文件反应慢怎么解决方法,电脑反应慢怎么解决
  10. Unity UGUI坐标与世界坐标转换