irc_topic => sub {},
irc_error => \&irc_error,
irc_disconnected => \&irc_disconnected,
+ irc_socketerr => \&irc_socketerr,
},
args => [@ARGV]);
$line = delete $heap->{line};
} elsif (defined($line = <$script>)) {
$heap->{lineno} = $.;
- print ".";
+ print "." unless $heap->{irc_debug};
} else {
# close all connections
foreach my $client (values %{$heap->{clients}}) {
}
}
+sub irc_socketerr {
+ my ($kernel, $session, $heap, $sender, $msg) = @_[KERNEL, SESSION, HEAP, SENDER, ARG0];
+ my $client = $heap->{sessions}->{$sender};
+ print "Client $client->{name} (re-)connect error: $_[ARG0]\n";
+ if ($client->{quitting}) {
+ $kernel->call($sender, 'unregister', 'all');
+ delete $heap->{sessions}->{$sender};
+ delete $heap->{clients}->{$client->{name}};
+ } else {
+ if ($client->{disconnect_expected}) {
+ delete $client->{disconnect_expected};
+ } else {
+ print "Got unexpected disconnect for $client->{name} (nick $client->{nick})\n";
+ }
+ $kernel->call($session, 'disable_client', $client);
+ $kernel->delay_set('reconnect', $client->{throttled} ? THROTTLED_TIMEOUT : RECONNECT_TIMEOUT, $client);
+ delete $client->{throttled};
+ }
+}
+
sub irc_notice {
my ($kernel, $session, $heap, $sender, $from, $to, $text) = @_[KERNEL, SESSION, HEAP, SENDER, ARG0, ARG1, ARG2];
my $client = $heap->{sessions}->{$sender};