Handle server restarts (SIGHUP) cleanly even with Net::Server 0.99
authorDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Wed, 20 Apr 2011 05:37:06 +0000 (01:37 -0400)
committerDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Wed, 20 Apr 2011 05:37:06 +0000 (01:37 -0400)
With Net::Server 0.97, the old code was working.  With Net::Server
0.99, @{ $server->{server}->{sock} }[0]->sockport() was returning
undef() after a HUP.

The simple solution is that we don't try to re-set the port at all
after a SIGHUP.

Crypt/Monkeysphere/MSVA.pm

index 6442fbbf9b90768ae642e71c4dee5d7650fb6156..fd3540b54405f15f8418174955dcfaa5f6654858 100755 (executable)
       $server->set_exit_status(10);
       $server->server_close();
     }
-    my $port = @{ $server->{server}->{sock} }[0]->sockport();
-    if ((! defined $port) || ($port < 1) || ($port >= 65536)) {
-      msvalog('error', "got nonsense port: %d.\n", $port);
-      $server->set_exit_status(11);
-      $server->server_close();
-    }
-    if ((exists $ENV{MSVA_PORT}) && (($ENV{MSVA_PORT} + 0) != $port)) {
-      msvalog('error', "Explicitly requested port %d, but got port: %d.", ($ENV{MSVA_PORT}+0), $port);
-      $server->set_exit_status(13);
-      $server->server_close();
+    if (!defined($self->port) || $self->port == 0) {
+      my $port = @{ $server->{server}->{sock} }[0]->sockport();
+      if ((! defined($port)) || ($port < 1) || ($port >= 65536)) {
+        msvalog('error', "got nonsense port: %d.\n", $port);
+        $server->set_exit_status(11);
+        $server->server_close();
+      }
+      if ((exists $ENV{MSVA_PORT}) && (($ENV{MSVA_PORT} + 0) != $port)) {
+        msvalog('error', "Explicitly requested port %d, but got port: %d.", ($ENV{MSVA_PORT}+0), $port);
+        $server->set_exit_status(13);
+        $server->server_close();
+      }
+      $self->port($port);
     }
-    $self->port($port);
     $self->{updatemonitor} = Crypt::Monkeysphere::MSVA::Monitor::->new($logger);
   }