gethttpheader.pl
上传用户:huihesys
上传日期:2007-01-04
资源大小:3877k
文件大小:1k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. #!/usr/bin/perl
  2. use Socket;
  3. my $proto = getprotobyname('tcp');
  4. socket(Server,PF_INET,SOCK_STREAM,$proto) || die "socket: $!";
  5. setsockopt(Server,SOL_SOCKET,SO_REUSEADDR,pack("l",1)) || die "setsocketopt: $!";
  6. bind(Server,sockaddr_in(6799,INADDR_ANY)) || die "bind: $!";
  7. listen(Server,SOMAXCONN) || die "listen: $!";
  8. my $paddr;
  9. my $waitedpid = 0;
  10. sub REAPER {
  11.     $SIG{CHLD} = &REAPER;  # loathe sysV
  12.     $waitedpid = wait;
  13. }
  14. $SIG{CHLD} = &REAPER;
  15. for ($waitedpid = 0; ($paddr=accept(Client,Server)) || $waitedpid; $waitedpid = 0, close Client) {
  16.        next if $waitedpid;
  17.        my($port,$iaddr) = sockaddr_in($paddr);
  18.        my $name = gethostbyaddr($iaddr,AF_INET);
  19.        print "Connection from: $name";
  20.        spawn (sub {
  21.           while(<CLIENT>) {
  22.           print $_;
  23.           }
  24.        });
  25. }
  26. sub spawn {
  27.   my $coderef=shift;
  28.   my $pid=fork;
  29.   if ($pid) {
  30.      print "begat $pid";
  31.      return; # i'm the parent
  32.   }
  33.   # else i'm the child -- go spawn
  34.   open(CLIENT,  "<&Client")   || die "can't dup client to stdin";
  35.   open(CLOUT, ">&Client")   || die "can't dup client to stdout";
  36.  ## open(STDERR, ">&STDOUT") || die "can't dup stdout to stderr";
  37.  exit &$coderef();
  38. }