校园网&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,欢迎批评指正)
- 校园网&openwrt记(十三)断网重连的循环版本
- 校园网&openwrt记(一)接触openwrt的原因
- 校园网&openwrt记(二)应用的大体设计
- 校园网&openwrt记(七)断网重连,crontab,静态路由
- 校园网&openwrt记(八)PPTP VPN
- 校园网&openwrt记(九)防火墙
- 校园网&openwrt记(十)iproute2
- 校园网&openwrt记(十五)luci module
- 校园网&openwrt记(五)构造udp包,Lua的int32运算和bit运算
- 校园网&openwrt记(六)获取拨号权限的rc.local启动项脚本
- 校园网&openwrt记(三)作为启动项
- 校园网&openwrt记(四)Lua发送udp包
- 校园网&openwrt记(十二)多线多播与mwan3
- 校园网&openwrt记(十四) init服务方法
- 我的openwrt学习笔记(十三):MT7688 串口测试
- 校园网&openwrt记(十一)策略路由实践 游戏端口走校园网关
- OpenWRT校园网ipv6设置
- 编译树莓派3的openwrt及njit-client上校园网
- 113. Path Sum II
- 蓝桥杯 算法训练 动态数组使用 大小写转换
- 从keystore获取debug,正式,签名
- 单元测试
- Python——debug(二)
- 校园网&openwrt记(十三)断网重连的循环版本
- 如何利用Spark提高批量插入Solr的效率
- php标准库(SPL)-数据结构(一)-SplDoublyLinkedList详解
- document window高度的计算
- ex5.34——重载“++,--,+”三个操作符
- Android实战技巧:ViewStub的应用
- 导入appcompat_v7报错:appcompat_v7\res\values-v23\styles_base.xml:20: error: Error retrieving parent for
- 怎么自定义ZBrush 4R7中按钮颜色
- pat1038:统计同成绩学生