LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1293|回复: 3

讨论:实现ppp拨号自动重拨

[复制链接]
发表于 2006-12-4 15:20:55 | 显示全部楼层 |阅读模式
想实现ppp拨号的自动重拨,小弟愚笨,现只有一种很笨得法子
编写一个程序作为后台运行, 通过与主机建立tcp/ip连接。与主机在指定时间内发送数据,比如主机在时间间隔1分钟向客户端发送数据则中,如果在3分钟内,客户端没有接受到数据,断ppp连接。然后重新启动pppd拨号。

现在,小弟想请教GGJJ大侠们,有没有更好的方法来实现这个功能呢 ?:help :help
 楼主| 发表于 2006-12-6 16:37:53 | 显示全部楼层
这几天来,在网上找了不少资料,方案有用iptables来检测一个tcp连接的活动状态。或者重写ppp拨号。但是上面的那种方法是最可行的,在小弟看来。
于是,现在的困难是如何在开发板上杀死pppd进程?
在rh9 下可以 可以 通过 kill -INT 'cat /var/run/$DEVICE.pid'
但是,uclinux下如何实现呢? /var/run/下为空 ~
回复 支持 反对

使用道具 举报

发表于 2006-12-8 14:20:30 | 显示全部楼层
提供一个蹩脚的方法,这是以前我自己写的一个小程序中的片断,pppd_disconnect() 中实现了断开。不过我用的不是 ucLinux,所以不知道能不能行。也许 killall 只是 kill -INT 的一个别名。不行的话就用 ps 和 grep 来找到 pppd 的 pid,也许能办到。

[PHP]
/* test if pppd is running */
int is_pppd_run()
{
        return system("ps -A | grep [p]ppd >/dev/null 2>&1") == 0;
}
/* try my best to kill it */
void ppp_disconnect()
{
        /* will this hang the thread? maybe */
        while (is_pppd_run() == 1) {
                system("killall pppd 2>/dev/null");
                sleep(1);
        }
}
[/PHP]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-8 16:55:20 | 显示全部楼层
谢谢dodo大哥提供的方法
困惑我这么长时间的问题终于得到解决。
其实,这两天我也在看shell相关的书籍
碰巧看到grep文本过滤这,哎,可惜我太笨,不会把两者联到一块
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表