ARST打卡第139周[139/521]
Algorithm
lc390_消除游戏
模拟,或者找规律,应该是找规律
模拟找规律: 巧妙利用每次左边界跳动的值。处理好数组中还剩的数组数,以及相邻数之差
https://leetcode-cn.com/problems/elimination-game/solution/xiao-chu-you-xi-by-leetcode-solution-ydpb/
1 | class Solution { |
Review
raft选举和提交动画
http://thesecretlivesofdata.com/raft/
生动有趣得讲述了raft协议
Tips
Share-vsftpd的vsf_two_process_start源码分析
common
父子进程之间通过priv_sock_login.h 中定义的模块来进行通信,然后进行处理
子进程
所以进入
vsf_two_process_start(&the_session);
子进程处理一些命令,然后等待检测父进程那边是否登录成功,成功则退出,或者ssl_slave
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29void
vsf_two_process_login(struct vsf_session* p_sess,
const struct mystr* p_pass_str)
{
char result;
priv_sock_send_cmd(p_sess->child_fd, PRIV_SOCK_LOGIN);
priv_sock_send_str(p_sess->child_fd, &p_sess->user_str);
priv_sock_send_str(p_sess->child_fd, p_pass_str);
priv_sock_send_int(p_sess->child_fd, p_sess->control_use_ssl);
priv_sock_send_int(p_sess->child_fd, p_sess->data_use_ssl);
result = priv_sock_get_result(p_sess->child_fd);
if (result == PRIV_SOCK_RESULT_OK)
{
/* Miracle. We don't emit the success message here. That is left to
* process_post_login().
* Exit normally, unless we are remaining as the SSL read / write child.
*/
if (!p_sess->control_use_ssl)
{
vsf_sysutil_exit(0);
}
else
{
ssl_slave(p_sess);
}
/* NOTREACHED */
}
// ...
}父进程登录成功之后,就数据传输
父进程process_login_req
父进程进行while处理登录尝试
1 | /* Parent - go into pre-login parent process mode */ |
然后从父子进程socket上的父fd读取子进程那边传来的ACCT,PASS等等信息,然后进行登录处理
1 | cmd = priv_sock_get_cmd(p_sess->parent_fd); |
其中 common_do_login中的第一句就是给子进程发送一个登录成功的信息,让子进程进入下一个阶段
并且如果是没有使用ssl,则等待子进程退出,否则就是ssl_slave
1 | static void |