home *** CD-ROM | disk | FTP | other *** search
/ ftp.madoka.org / 2014.12.ftp.madoka.org.tar / ftp.madoka.org / pub / plum / 2.x / plum2_15_4.lzh / support / pclient < prev    next >
Text File  |  1997-12-13  |  2KB  |  79 lines

  1. #!/bin/perl -w
  2. # $Id: pclient,v 2.4 1997/12/13 23:16:02 hasegawa Exp $
  3. # copyright (c)1997 pupu_j <hasegawa@agusa.nuie.nagoya-u.ac.jp>
  4.  
  5. $SOCKADDR = 'S n a4 x8';
  6. $PROTO = getprotobyname('tcp');
  7.  
  8. if ($] < 5) {
  9.   foreach $inc (@INC) {
  10.     if (-r "$inc/sys/socket.ph") {
  11.       eval 'require "sys/socket.ph"';
  12.       $SOCKET = "$inc/sys/socket.ph" unless $@;
  13.       last;
  14.     }
  15.   }
  16. } else {
  17.   eval 'use Socket';
  18.   $SOCKET = 'Socket.pm' unless $@;
  19. }
  20.  
  21. $AF_INET = eval { &AF_INET } || 2;
  22. $PF_INET = eval { &PF_INET } || 2;
  23. $SOCK_STREAM = eval { &SOCK_STREAM } || 1;
  24.  
  25. &main(@ARGV);
  26.  
  27. sub main {
  28.   local(@args) = @_;
  29.   local($host, $port, $rin, $rout, $serv, $addr, $stdin, $nf, $left, $cbuf, $sbuf, $tmp);
  30.   if (@args < 2) {
  31.     &usage();
  32.     exit(1);
  33.   }
  34.   ($host, $port) = @args;
  35.   if ($host =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)/) {
  36.     $addr = pack('C4', $1, $2, $3, $4);
  37.   } elsif ($host =~ /^\d+$/) {
  38.     $addr = pack('N', $host);
  39.   } else {
  40.     $addr = (gethostbyname($host))[4];
  41.   }
  42.   defined($addr) || die "$host not found\n";
  43.   socket(SOCKET, $PF_INET, $SOCK_STREAM, $PROTO) || die "cannot create socket\n";
  44.   connect(SOCKET, pack($SOCKADDR, $AF_INET, $port, $addr)) || die "cannot connect to server\n";
  45.   $serv = fileno(SOCKET);
  46.   $stdin = fileno(STDIN);
  47.   $rin = '';
  48.   vec($rin, $serv, 1) = 1;
  49.   vec($rin, $stdin, 1) = 1;
  50.   select((select(SOCKET), $| = 1)[0]);
  51.   select((select(STDIN), $| = 1)[0]);
  52.   select((select(STDOUT), $| = 1)[0]);
  53.   $cbuf = $sbuf = $tmp = '';
  54.   for (;;) {
  55.     ($nf, $left) = select($rout = $rin, undef, undef, undef);
  56.     if (vec($rout, $serv, 1)) {
  57.       sysread(SOCKET, $tmp, 1024) || die "connection closed\n";
  58.       $sbuf .= $tmp;
  59.       while ((($next, $rest) = split(/[\r\n]+/, $sbuf, 2)) == 2) {
  60.         print STDOUT $next, "\n";
  61.         $sbuf = $rest || '';
  62.       }
  63.       $sbuf = $next || '';
  64.     } elsif (vec($rout, $stdin, 1)) {
  65.       sysread(STDIN, $tmp, 1024) || die "connection closed\n";
  66.       $cbuf .= $tmp;
  67.       while ((($next, $rest) = split(/[\r\n]+/, $cbuf, 2)) == 2) {
  68.         print SOCKET $next, "\n";
  69.         $cbuf = $rest || '';
  70.       }
  71.       $cbuf = $next || '';
  72.     }
  73.   }
  74. }
  75.  
  76. sub usage {
  77.   print 'usage: perl pclient <server> <port>', "\n";
  78. }
  79.