net:ftp模块的问题.

net:ftp模块的问题.

从远程主机下载的时候,有时候会发生这个错误.....这是什么回事呢?
系统是bsd6.2 +perl5.8.8
Timeout at /usr/local/lib/perl5/5.8.8/Net/FTP.pm line 503

[Copy to clipboard] [ - ]
CODE:
sub get_file{
        my($save_data,$host,$file,$ftp_user,$ftp_passwd)=($_[0],$_[1],$_[2],$_[3],$_[4]);
        my $ftp=Net::FTP->new($host,Port=>2121,Passive=>1);
        $ftp->login($ftp_user,$ftp_passwd);
        $ftp->binary;
        my $offset = (stat($save_data))[7] || 0;
        print GLOG &get_time,"  start DL <$host> <$file>\n";
        print &get_time,"  start DL <$host> <$file>\n";
        $ftp->get($file,$save_data,$offset);
        $ftp->quit;
}

my $ftp=Net::FTP->new($host,Port=>2121,Passive=>1);
改为
my $ftp=Net::FTP->new($host,Port=>2121,Passive=>1,Timeout=>1200);
看看。

Timeout默认是120,你根据自己的情况加大它吧。
加大了还是没有用,不知道是什么原因...
只是有时候才出现?是不是有时候网络不好啊。
你的Net::FTP是哪个版本的啊,看看/usr/local/lib/perl5/5.8.8/Net/FTP.pm line 503行是做什么的。


QUOTE:
原帖由 freeand 于 2007-10-27 14:41 发表
你的Net::FTP是哪个版本的啊,看看/usr/local/lib/perl5/5.8.8/Net/FTP.pm line 503行是做什么的。

版本是2.75

[Copy to clipboard] [ - ]
CODE:

501  while(1)
502   {
503    last unless $len = $data->read($buf,$blksize);
504
505    if (trEBCDIC && $ftp->type ne 'I')
506     {
507      $buf = $ftp->toebcdic($buf);
508      $len = length($buf);
509     }
510
511    if($hashh) {
512     $count += $len;
513     print $hashh "#" x (int($count / $hashb));
514     $count %= $hashb;
515    }
516    unless(print $loc $buf)
517     {
518      carp "Cannot write to Local file $local: $!\n";
519      $data->abort;
520      close($loc)
521         unless $localfd;
522      return undef;
523     }
524   }

cpan上的最新版本是$VERSION = '2.77';
不知升级一下有没有用...
2.77版代码是:

[Copy to clipboard] [ - ]
CODE:
490   while (1) {
491     last unless $len = $data->read($buf, $blksize);
492
493     if (trEBCDIC && $ftp->type ne 'I') {
494       $buf = $ftp->toebcdic($buf);
495       $len = length($buf);
496     }
497
498     if ($hashh) {
499       $count += $len;
500       print $hashh "#" x (int($count / $hashb));
501       $count %= $hashb;
502     }
503     unless (print $loc $buf) {
504       carp "Cannot write to Local file $local: $!\n";
505       $data->abort;
506       close($loc)
507         unless $localfd;
508       return undef;
509     }
510   }

那句是读数据的哦,那应该是读数据时遇上网络或其它因素超时了。
那等你测试新版本看看了。