- 论坛徽章:
- 1
|
关于waitpid的问题!
#!/usr/bin/perl
use IO::Socket;
use POSIX 'WNOHANG';
$SIG{CHLD}=sub {while (waitpid(-1,WNOHANG)>;0) {}};
$SIG{INT}=sub{ $quit++;};
#$sock=IO::Socket::INET->;new(
# LocalHost=>;'10.144.43.175',LocalPort=>;'5555',Reuse=>;1,Listen=>;5);
$sock=IO::Socket::INET->;new(
LocalPort=>;'5555',Listen=>;20,Proto=>;'tcp',Reuse=>;1);
die "can't create a listening socket: $@" unless $sock;
warn "Server ready. Waiting for connections ...\n";
while (!$quit){
next unless my $acc=$sock->;accept;
defined($pid=fork()) or die "can't fork!";
if ($pid==0) {
close $sock;
STDIN->;fdopen($acc,"<" or die "can't reopen STDIN: $!";
STDOUT->;fdopen($acc,">;" or die "can't reopen STDOUT: $!";
STDERR->;fdopen($acc,">;" or die "can't reopen STDERR: $!";
$|=1;
while ($data=<$acc> {
SWITCH: {
if ($data eq "quit\r\n" { exit(1);}
if ($data eq "host\r\n" {print $acc $acc->;peerhost(),"\n";last SWITCH;}
if ($data eq "port\r\n" {print $acc $acc->;peerport(),"\n";last SWITCH;}
}
}
close ($acc);
}
close ($acc);
}
close $sock;
我改好後的程序碼..你的程序碼..怪怪的.. |
|