校园网&openwrt记(十三)断网重连的循环版本

来源:互联网 发布:台式电脑推荐2017 知乎 编辑:程序博客网 时间:2024/05/29 16:39

  在之前所完成的启动项版本中,断网重连是使用crontab来完成的。每分钟都会检查网络状态,虽然看似简单实用,但是有时候却会出现很严重的问题。由于使用了ping来检查网络状态,在网络状态不佳的情况下,如果不指定短的超时,那么我们所运行的检查网络脚本有可能会运行很久,又由于每分钟会执行一次这个检查脚本,在很坏的情况下,这个脚本可能会在同一时间执行多次,这是很不爽的事情。
  而且,由于使用了crontab,除了rc.local处需要执行的启动脚本“connect”和发送获取权限包的lua脚本(getperm.lua),还需要这一个断网重连的脚本,逻辑是很清楚,但是其实完全可以整合到启动脚本中。
  再者,一分钟检查一次,在最坏的情况下我们得等一分钟再能够重新联网,这也是需要改进的地方。
  所以,使用循环检测的方法会更加实用一些。将启动脚本和断网重连的脚本整合起来,最终形成脚本connect,其逻辑如下:
  1. 首先发送获取拨号权限的udp包给服务器,成功则跳到3,否则跳到2
  2. 由于获取权限失败,于是进入一个循环当中,循环条件是获取权限失败,循环体做的事情是,首先判断是否能够连接到服务器,不能则重启wan以通过dhcp获取新的ip(也可以进入一个循环直到可以连接服务器为止),然后不管是否能够连接服务器都进行一次获取权限,更新获取权限的失败与否,失败则继续循环,成功则跳出循环,进入3
  3. 此时已经获取权限成功,可以进行pppoe拨号了(ifup pppoe),由于拨号需要几秒时间,所以这里适当sleep几秒,等待联网成功,然后执行4
  4. 此时应该已经是联网成功了,开始进行循环的网络判断,联网正常则继续循环,否则跳出循环,回到步骤1(即1、2、3、4置于一个while true之内)
  这样,在rc.local中只要添加 …/connect & 这样一句命令就可以了,它将作为后台程序保证我们能够断网重连,“…”是connect脚本所在的目录。(写完这一系列文章后将会把源码放在我的github,欢迎批评指正)
  

0 0
原创粉丝点击