gethttpheader.pl
上传用户:huihesys
上传日期:2007-01-04
资源大小:3877k
文件大小:1k
- #!/usr/bin/perl
- use Socket;
- my $proto = getprotobyname('tcp');
- socket(Server,PF_INET,SOCK_STREAM,$proto) || die "socket: $!";
- setsockopt(Server,SOL_SOCKET,SO_REUSEADDR,pack("l",1)) || die "setsocketopt: $!";
- bind(Server,sockaddr_in(6799,INADDR_ANY)) || die "bind: $!";
- listen(Server,SOMAXCONN) || die "listen: $!";
- my $paddr;
- my $waitedpid = 0;
- sub REAPER {
- $SIG{CHLD} = &REAPER; # loathe sysV
- $waitedpid = wait;
- }
- $SIG{CHLD} = &REAPER;
- for ($waitedpid = 0; ($paddr=accept(Client,Server)) || $waitedpid; $waitedpid = 0, close Client) {
- next if $waitedpid;
- my($port,$iaddr) = sockaddr_in($paddr);
- my $name = gethostbyaddr($iaddr,AF_INET);
- print "Connection from: $name";
- spawn (sub {
- while(<CLIENT>) {
- print $_;
- }
- });
- }
- sub spawn {
- my $coderef=shift;
- my $pid=fork;
- if ($pid) {
- print "begat $pid";
- return; # i'm the parent
- }
- # else i'm the child -- go spawn
- open(CLIENT, "<&Client") || die "can't dup client to stdin";
- open(CLOUT, ">&Client") || die "can't dup client to stdout";
- ## open(STDERR, ">&STDOUT") || die "can't dup stdout to stderr";
- exit &$coderef();
- }