项目中一直用的ssh,但是ssh连接不稳定,于是准备使用autossh;于是开始学习autossh。网上搜相关资料,才发现除了最基本的用法格式:autossh –M 5555 -CNR10001:127.0.0.1:22 root@host -4外,任何详细说明都没有,重连时间、重连机制都没有。因此不得不自己学习源码;
源码下载路径:
http://www.harding.motd.ca/autossh/autossh-1.4e.tgz
自己梳理的软件流程图如下:
上图中主要描述了平时使用时,经常出现的分支;其中,很多异常分支没有在流程图中体现;
如上图可见几个循环:
1)9开始的大循环;每次ssh子进程结束时,进入此大循环,重新执行创建子进程和监视流程;若周期性的监视流程中,socket读写数据出错,且连续三次均出错则也回到此循环;
2)10开始的监视函数内循环,每次设置定时器,定时器触发后,使用12的conn_test测试,socket测试通过重新开始循环,及重新设置定时器;若网络断开,则测试不通过,会进入9的大循环;
分析重连机制中几个关键时间如下:
1) 轮询探测时间:软件中默认的是10分钟,对应POLL_