网络

use strict;

use warnings;

use Net::Ping;

 

my @host_array = qw(127.0.0.1);

 

my $last_isOk = 1; #上次的测试结果

my $curr_isOk = 1; #最终测试结果

my $normalT = 5; #正常情况下测试间隔

my $failedT = 1;

my $is_runing = 0;

 

&setLock(1);

 

while (1) {

    $last_isOk = $curr_isOk;

    

foreach my $host (@host_array)

{

$curr_isOk = (&test_site($host)) ? 1 : 0; 

last if $curr_isOk; #如果有成功,则不继续测

}

 

#本地网络有问题

unless ($curr_isOk) {

if (1 == $last_isOk) { #上次成功,本次失败, 需要修改失败锁

&setLock(0);

#写日志#---待完善

}

}

elsif(0 == $last_isOk) { #上次失败,本次成功,需要修改失败锁

&setLock(1);

#写日志#---待完善

}

 

unless ($is_runing) {

#启动日志,---待完善

print "-----start ok-----/n";

$is_runing = 1;

}

sleep ($curr_isOk ? $normalT : $failedT);

}

 

##====================================主程序到此结束========================

 

#设置文件锁

#入参:1设置为成功,0设置为失败

sub setLock

{

#---待完善

print "set ",shift, "/n";

}

 

#失败返回0,成功返回1

sub test_site

{

my $host = shift;

my $timeOut = 5; #超时时间

my $max_ms = 200/1000; #ping 允许的时延,200毫秒

my $tmpIs = 1; #测试结果

 

my $p = Net::Ping->new("icmp");

$p->hires();

my ($ret, $duration, $ip) = $p->ping($host, $timeOut); #进行 icmp 测试

unless ($ret and ($duration < $max_ms)){#icmp 失败,进行 tcp 测试

#写日志---待完善,记录返回时间

sleep 1;

 

my $tcp_p = Net::Ping->new("tcp", 2);

$tcp_p->port_number(getservbyname("http", "tcp"));

$tmpIs = 0 unless $tcp_p->ping($host);

$tcp_p->close();

}

 

$p->close();

return $tmpIs;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值