changed connect strategy to factorise for external programs
[spider.git] / perl / ExtMsg.pm
index 8324a8ca3296d2401e67e4faacbdd95f0e390ec6..f1472789152fbfc3836142577d8831e86a4b591e 100644 (file)
@@ -272,49 +272,7 @@ sub _doconnect
                bless $conn, 'AGWMsg';
                $r = $conn->connect($line);
        } elsif ($sort eq 'ax25' || $sort eq 'prog') {
-               local $^F = 10000;              # make sure it ain't closed on exec
-               my ($a, $b) = IO::Socket->socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC);
-               if ($a && $b) {
-                       $r = 1;
-                       $a->autoflush(1);
-                       $b->autoflush(1);
-                       my $pid = fork;
-                       if (defined $pid) {
-                               if ($pid) {
-                                       close $b;
-                                       $conn->{sock} = $a;
-                                       $conn->{csort} = $sort;
-                                       $conn->{lineend} = "\cM" if $sort eq 'ax25';
-                                       $conn->{pid} = $pid;
-                                       if ($conn->{rproc}) {
-                                               my $callback = sub {$conn->_rcv};
-                                               Msg::set_event_handler ($a, read => $callback);
-                                       }
-                                       dbg("connect $conn->{cnum}: started pid: $conn->{pid} as $line") if isdbg('connect');
-                               } else {
-                                       $^W = 0;
-                                       dbgclose();
-                                       STDIN->close;
-                                       STDOUT->close;
-                                       STDOUT->close;
-                                       *STDIN = IO::File->new_from_fd($b, 'r') or die;
-                                       *STDOUT = IO::File->new_from_fd($b, 'w') or die;
-                                       *STDERR = IO::File->new_from_fd($b, 'w') or die;
-                                       close $a;
-                                       unless ($main::is_win) {
-#                                              $SIG{HUP} = 'IGNORE';
-                                               $SIG{HUP} = $SIG{CHLD} = $SIG{TERM} = $SIG{INT} = 'DEFAULT';
-                                               alarm(0);
-                                       }
-                                       exec "$line" or dbg("exec '$line' failed $!");
-                               } 
-                       } else {
-                               dbg("cannot fork");
-                               $r = undef;
-                       }
-               } else {
-                       dbg("no socket pair $!");
-               }
+               $r = $conn->start_program($line, $sort);
        } else {
                dbg("invalid type of connection ($sort)");
        }