home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / languages / perl / tutorial / eg / uupath < prev    next >
Encoding:
Text File  |  1990-02-06  |  1.4 KB  |  66 lines

  1. #!/usr/bin/perl
  2.  
  3. ($program = $0) =~ s%.*/%%;
  4.  
  5. die "i'd rather be called uupath or uuhost"
  6.     unless $program eq 'uupath' || $program eq 'uuhost';
  7.  
  8. die "usage: $program args\n" if $#ARGV < $[;
  9.  
  10. do 'sys/socket.pl' || die "can't do sys/socket.pl: $@";
  11.  
  12. $sockaddr = 'S n a4 x8';
  13.  
  14. chop ($hostname = `hostname`);
  15.  
  16.  
  17. ($USER = getlogin) || ($USER = $ENV{'USER'}) || (($USER) = getpwuid($<));;
  18.  
  19. (($name, $aliases, $port, $proto) = getservbyname('uupath', 'tcp'))
  20.     || die "no tcp service for \"uupath\"";
  21. #printf "port is %d\n", $port;
  22.  
  23. (($name, $aliases, $type, $len, $thisaddr) = gethostbyname($hostname))
  24.     || die "no localhost \"$hostname\"\n";
  25. (($name, $aliases, $type, $len, $thataddr) = gethostbyname('mailhost'))
  26.     || die "no server host \"mailhost\"\n";
  27. #printf "server is %s\n", $name;
  28.  
  29. ($name, $aliases, $proto) = getprotobyname('tcp'); 
  30.  
  31.  
  32.  
  33. $this = pack($sockaddr, $AF_INET, 0, $thisaddr);
  34. $that = pack($sockaddr, $AF_INET, $port, $thataddr);
  35.  
  36. socket(SERVER, $PF_INET, $SOCK_STREAM, $proto ) || die "socket: $!";
  37.  
  38. bind(SERVER, $this) || die "bind: $!";
  39.  
  40. connect(SERVER, $that) || die "connect: $!";
  41.  
  42. select(SERVER); $| = 1; select(STDOUT);
  43.  
  44. printf SERVER "helo %s\@%s\n", $USER, $hostname;
  45.  
  46. $program =~ s/^uu//;
  47.  
  48. print SERVER "$program @ARGV\n";
  49.  
  50. while (<SERVER>) {
  51.     last if /^uuhostd> \//;
  52.  
  53. while (<SERVER>) {
  54.     last if /^\.$/;
  55.     next unless $_ || $ok;
  56.     $ok++;
  57.     print;
  58.  
  59. print SERVER "quit\n";
  60.  
  61. close SERVER;
  62.  
  63. exit !$ok;
  64.