【tinyproxy走读】代码主体逻辑

本文详细介绍了基于多进程和IO复用的主体逻辑架构,通过伪代码展示了配置加载、监控初始化、后台运行、信号处理等核心流程。深入探讨了子进程池的创建与管理,以及子进程如何通过select机制处理连接请求,实现资源的有效分配和回收。

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

主体逻辑


伪代码流程

main
配置加载(reload_config_file)
监控初始化(init_stats)
if (后台运行)
	·makedeamon(); //fork子进程,杀死父进程
忽略pipe信号 (SIGPIPE, SIG_IGN)
开启监听端口(child_listening_sockets)
信号处理(SIGCHLD、SIGTERM、SIGHUP)
创建子进程池 child_pool_create    -->用于处理连接
**child_main_loop**
	检查*servers_waiting是否小于空闲的server池
	if 小于
		child_make():fork、子进程进入【child_main】
	else
		nothing
	间隔5秒进行一次检查(  sleep(5)  )
资源回收 
关闭代理

线程处理模型

使用多进程+IO复用(select)的方式处理连接
tinyrpoxy线程模型

子进程逻辑(chlid_main)


chlid_main            IO多路复用--select机制       
初始化FD_ZERO  fd_set
把所有监听端口设置为不阻塞
socket_nonblocking
开启fd集的一位 FD_SET(*fd, &rfds);
主循环(!config.quit)
select
找出可读的socket(FD_ISSET)
socket_blocking
accept
【handle_connect】
达到最大请求数量的时候退出子进程
太多空闲server,退出子进程

连接处理逻辑(handle_connect)


handle_connect      
获取对端地址

	socket_nonblocking
	开启fd集的一位 FD_SET(*fd, &rfds);
主循环(!config.quit)
	select
	找出可读的socket(FD_ISSET)
	socket_blocking
	accept
	【handle_connect】
	达到最大请求数量的时候退出子进程
	太多空闲server,退出子进程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值