Tor源码分析三 -- 客户端执行流程(初始化)

本文主要分析Tor系统客户端的执行流程,从入口函数tor_main开始,详细讲解了初始化过程,包括时间更新、线程初始化、日志系统、全局变量设定等。重点讨论了option_init_from_torrc()函数,解释了配置文件与命令行参数的优先级规则,以及如何处理多值选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  Tor系统中,主机的身份包括有这几种:Client,Bridge Server,Relay Server,Directory Server。

  当然,有的时候一台主机是可以身兼数个身份,提供不同的服务或获取服务。

  我们从最简单的客户端配置的Tor来进行分析,事先了解整个Tor系统的执行规程,之后再具体分析其他身份时候的不同操作,从而加快了解系统的速度。此处要说明的是,由于笔者对Windows的编程不甚了解,暂时就去除源码中所有为了让Tor系统具有夸平台性的Windows代码部分。


1. Tor系统的入口函数

  大部分源程序的入口函数是main。Tor系统为了实现更加简便的单元测试,将main函数设为调用tor_main函数,后者是整个Tor系统的执行主函数。上述关系可以在Tor_main.c文件中看到,该文件中只是用很少的几行描述了main与tor_main之间的关系。


2. Tor系统初始化

  系统初始化包括四个函数:

  1)update_approx_time(time(NULL))

    记录当前时间的估值,存于cached_approx_time,一般每秒钟被系统其它部分调用一次。在系统开始运行时,最先执行。

  2)tor_threads_init()

    根据Tor系统是否被允许是多线程运行而执行不同的操作。

    若不允许多线程运行,则不做操作;

    若允许,记录main_thread_id,并根据系统的平台,设置thread_initialized标签以及对多线程参数进行初始化。

  3)init_logging()

    初始化系统日志信息列表。

    初始化对log进行操作的互斥量log_mutex,设置log_mutex_initialized标签。在系统刚刚启动时,会新建log日志消息链表p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值