PROXY  WHOIS  RQUOTE  TEXTS  SOFT  FOREX  BBOARD
 Music  Philosophy  Code  Literature  Russian

= ROOT|Technical|Code_Examples|Perl|site_perl|JUNOS|Access.pm =

page 2 of 6



    for ($deadline = time() + 5; $deadline < time();) {
	$dead = waitpid($kid, &WNOHANG);
	return 1 if $dead == $kid;
	sleep 1;
    }

    # Ask nicely...
    return 1 if kill("TERM", $kid) == 0;

    # Wait 10 seconds to see if they've got manners.
    for ($deadline = time() + 10; $deadline < time();) {
	$dead = waitpid($kid, &WNOHANG);
	return 1 if $dead == $kid;
	sleep 1;
    }

    # No more Mister Nice Guy....
    return 1 if kill("KILL", $kid) == 0;

    # Wait 15 seconds for the real death....
    for ($deadline = time() + 15; $deadline < time();) {
	$dead = waitpid($kid, &WNOHANG);
	return 1 if $dead == $kid;
	sleep 1;
    }

    # Nothing worked. Sigh...
    return undef;
}

sub send
{
    my($self, @data) = @_;
    my $data = join("", @data);

    trace("IO", "send: [[[[[$data]]]]]");
    tracept("IO");

    return if (!$self->{OUTPUT});

    #$self->{send_data} .= $data;
    #print "SEND: $data\n";
    my $rc = syswrite($self->{OUTPUT}, $data, length($data));
    $self->{seen_eof} = 1 if $rc <= 0;
    $rc;
}

sub recv
{
    my($self, $timeout) = @_;
    my $data;

    tracept("IO");
    return if (!$self->{INPUT});
    #print "SSF:\n",$self->{send_data},"\n";
    #print "Going to sysread...\n";
    my $len = sysread($self->{INPUT}, $data, 0x2000);
    #print "Done  sysread $len\n";

    $self->{seen_eof} = 1 if $len < 0;
    $self->{seen_eof} = 1 if $len == 0 && eof($self->{INPUT});
    if ($len == 0) {
        $self->{JUNOS_Device}->report_error("recv failed: " . (eof($self->{INPUT}) ? "EOF" : "dead"));
  	return;
    }

    #print "RECV: $data\n";
    trace("IO", "recv: $len [[[[[$data]]]]]");

    $data;
}

#
# Have we hit end-of-file yet?
#
sub eof
{
    my($self) = @_;

    $self->{seen_eof};
}

#
# start a command using unix-domain socket pairs; not currently used
#
sub start_command_sockets
{
    my $self = shift;

    tracept("IO");

    my($s1a, $s1b) = IO::Socket->socketpair(AF_UNIX, SOCK_STREAM, 0);
    my($s2a, $s2b) = IO::Socket->socketpair(AF_UNIX, SOCK_STREAM, 0);

    my $pid = fork;
    if ($pid < 0) {
        $self->{JUNOS_Device}->report_error("fork failed");
	return;
    } elsif ($pid == 0) {
	trace("Child", "Child $pid/", $$, " cmd: ", join(" ", @_));
=2=

1| < PREV = PAGE 2 = NEXT > |3|4|5|6

UP TO ROOT | UP TO DIR | TO FIRST PAGE

Google
 


E-mail Facebook Google Digg del.icio.us BlinkList Fark Furl Ma.gnolia Netscape NewsVine Reddit Slashdot Spurl StumbleUpon Technorati YahooMyWeb LiveJournal Blogmarks TwitThis Live News2.ru BobrDobr.ru Memori.ru MoeMesto.ru

0.005476 wallclock secs ( 0.01 usr + 0.01 sys = 0.02 CPU)