cleanups and fixes
[srvx.git] / tests / test-driver.pl
index 669623555d032bccfaeff984e2890da6ff94fcc4..161f2611177bf801bc8bf442effcf86c5e25fd48 100755 (executable)
@@ -86,6 +86,7 @@ POE::Session->create(inline_states =>
                       irc_topic => sub {},
                       irc_error => \&irc_error,
                       irc_disconnected => \&irc_disconnected,
+                      irc_socketerr => \&irc_socketerr,
                      },
                      args => [@ARGV]);
 
@@ -420,6 +421,26 @@ sub irc_disconnected {
   }
 }
 
+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};