On Fri, Mar 10, 2000 at 09:38:54AM +0000, [EMAIL PROTECTED] wrote:
> Great I will take a look at this. I would have to look at the code
> to see I what I currently do still works, but you might want to
> think about adding this.
> 
> We have several daemons which have a command interface via a socket.
> I did not what to have to create a new socket for NetServer::ProcessTop 
> so I did this.

Oh!  No problem:

==== //depot/D/NetServer-Portal/lib/NetServer/Portal.pm#4 - 
/cache/D/NetServer-Portal/lib/NetServer/Portal.pm ====
--- /tmp/tmp.19802.0    Fri Mar 10 07:44:43 2000
+++ /cache/D/NetServer-Portal/lib/NetServer/Portal.pm   Fri Mar 10 07:44:16 2000
@@ -40,16 +40,31 @@
     require NetServer::Portal::Top;
     require NetServer::Portal::Pi;
     eval {
-       NetServer::Portal->start();
+       my $sock = NetServer::Portal->new_socket();
+       NetServer::Portal->start($sock);
 #      warn "Listening on ".(7000+($$%1000))."\n";
     };
     if ($@) { warn; return }
 }
 
-sub start {
+sub new_socket {
     my ($class, $port) = @_;
     $Port = $port || $BasePort + $$ % 1000;
     
+    # Mostly snarfed from perlipc example; thanks!
+    my $proto = getprotobyname('tcp');
+    my $sock = gensym;
+    socket($sock, PF_INET, SOCK_STREAM, $proto) or die "socket: $!";
+    setsockopt($sock, SOL_SOCKET, SO_REUSEADDR, pack('l', 1))
+       or die "setsockopt: $!";
+    bind($sock, sockaddr_in($Port, INADDR_ANY)) or die "bind: $!";
+    listen($sock, SOMAXCONN);
+    $sock;
+}
+
+sub start {
+    my ($class, $sock) = @_;
+    
     eval { $StoreTop = retrieve($StoreFile) };
     if ($@) {
        if ($@ =~ /No such file/) {
@@ -64,15 +79,6 @@
                    min => 15, max => 300, nice => 1, cb => sub {
                        store $StoreTop, $StoreFile;
                    });
-
-    # Mostly snarfed from perlipc example; thanks!
-    my $proto = getprotobyname('tcp');
-    my $sock = gensym;
-    socket($sock, PF_INET, SOCK_STREAM, $proto) or die "socket: $!";
-    setsockopt($sock, SOL_SOCKET, SO_REUSEADDR, pack('l', 1))
-       or die "setsockopt: $!";
-    bind($sock, sockaddr_in($Port, INADDR_ANY)) or die "bind: $!";
-    listen($sock, SOMAXCONN);
 
     Event->io(fd => $sock, nice => NICE, cb => \&service_client,
              desc => "NetServer::Portal");

-- 
"Never ascribe to malice that which can be explained by stupidity."
                           via, but not speaking for Deutsche Bank

Reply via email to