sub init
{
return unless $enable;
- $rproc = shift;
+ # only set $rproc if there is something to set rproc from!
+ my $rp = shift;
+ $rproc = $rp if defined $rp;
+
finish();
dbg("AGW initialising and connecting to $addr/$port ...");
- $sock = IO::Socket::INET->new(PeerAddr => $addr, PeerPort => $port, Proto=>'tcp', Timeout=>15);
+ $sock = IO::Socket::INET->new(PeerAddr => $addr, PeerPort => $port, Proto=>'tcp', Timeout=>3);
$lastconnect = $main::systime;
unless ($sock) {
dbg("Cannot connect to AGW Engine at $addr/$port $!");
Msg::set_event_handler($sock, read=>undef, write=>undef, error=>undef);
$sock->close;
$lastconnect = $main::systime;
+ $sock = undef;
}
+ $finishing = 0;
}
sub login
my $pid = shift || 0;
my $data = shift || '';
my $len = 0;
+
+ return unless $sock;
$len = length $data;
if ($sort eq 'y' || $sort eq 'H') {
}
} else {
if (Msg::_err_will_block($!)) {
- return;
+ return;
} else {
- $bytes_read = 0;
+ _error();
+ return;
}
}
sub _error
{
- dbg("error on AGW connection $addr/$port $!");
+ return if $finishing;
+ $finishing++;
+ dbg("AGW connection error on $addr/$port $!");
Msg::set_event_handler($sock, read=>undef, write=>undef, error=>undef);
- $sock = undef;
for (%circuit) {
&{$_->{eproc}}() if $_->{eproc};
$_->disconnect;
}
+ $sock = undef;
$lastconnect = $main::systime;
+ $finishing = 0;
}
sub _decode
sub process
{
# try to reconnect to AGW if we could not previously or there was an error
- if ($enable && !$sock && ($lastconnect + $connectinterval) >= $main::systime) {
+ if ($enable && !$sock && $main::systime >= $lastconnect + $connectinterval) {
init();
}
return unless $sock;