最大连接数与每ip连接数的限制

一、最大连接数的限制

概念

这是指服务器可以同时接收的最大连接数,防止服务器压力过大而在应用层进行的限制。

实现

总体思路:将当前连接数保存于变量num_clients变量中,然后与配置项numble_max_clients进行比较,如果超过了就不让登录,当一个客户登录的时候num_clents加1,当一个客户退出的时候,num_clients减1。

1.一旦服务器端与客户端经过三次握手建立连接之后,服务端就需要创建进程为其服务,此时,将连接数加1。

//来了一个新的客户端,需要创建子进程出来
++s_children;
//当前连接数等于子进程数
sess.num_clients = s_children;

2.然后在负责服务的子进程中进行最大连接数的判断

如果当前连接数超过了最大连接数,那么就要退出当前子进程。

//连接数的判定
void check_limits(session_t *sess)
{
	//最大连接数配置项是否开启并且当前连接数超过了最大连接数
	if (tunable_max_clients > 0 && sess->num_clients > tunable_max_clients) {
		ftp_reply(sess, FTP_TOO_MANY_USERS, 
			"There are too many connected users, please try later.");

		//退出当前子进程
		exit(EXIT_FAILURE);
	}

    //最大连接数没有超过上限的情况下,再检查ip的连接数是否超过上限
	if (tunable_max_per_ip > 0 && sess->num_this_ip > tunable_max_per_ip) {
		ftp_reply(sess, FTP_IP_LIMIT, 
			"There are too many connections from your internet address.");

		exit(EXIT_FAILURE);
	}
}

3.负责服务客户端的子进程退出连接后,父进程进行后续处理。

父进程是专门用于处理客户端连接的,父进程会注册SIGC

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值