/* Copyright (C) 1991, Marcus J. Ranum. All rights reserved. */ #ifndef lint static char RCSid[] = "$Header: /usr/users/mjr/hacks/umud/RWHO/RCS/mudwho.c,v 1.5 91/05/28 22:39:32 mjr Exp $"; #endif #include <stdio.h> #include <sys/types.h> #include <errno.h> extern int errno; #include <ctype.h> #include <fcntl.h> #include <sys/file.h> #include <sys/time.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #define STREAMPORT 6889 #define ENVHOST "MUDWHOSERVER" #define ENVPORT "MUDWHOPORT" #ifndef NO_HUGE_RESOLVER_CODE extern struct hostent *gethostbyname(); #endif extern char *getenv(); main(ac,av) int ac; char *av[]; { struct sockaddr_in addr; struct hostent *hp; int fd; char *p; int red; char rbuf[1024]; char *srv = (char *)0; int portnum = STREAMPORT; /* setup host address */ if(ac > 1) srv = av[1]; else srv = getenv(ENVHOST); /* setup port # if we can */ if(ac > 2) { portnum = atoi(av[2]); } else { if((p = getenv(ENVPORT)) != (char *)0) portnum = atoi(p); } if(srv == (char *)0) { fprintf(stderr,"usage: hostname [or envir %s]\n",ENVHOST); exit(1); } p = srv; while(*p != '\0' && (*p == '.' || isdigit(*p))) p++; /* not all digits or dots */ if(*p != '\0') { #ifndef NO_HUGE_RESOLVER_CODE if((hp = gethostbyname(srv)) == (struct hostent *)0) { fprintf(stderr,"unknown host %s\n",srv); exit(1); } (void)bcopy(hp->h_addr,(char *)&addr.sin_addr,hp->h_length); #else fprintf(stderr,"must use numerical notation for host name\n"); exit(1); #endif } else { unsigned long f; if((f = inet_addr(srv)) == -1L) { fprintf(stderr,"unknown host %s\n",srv); exit(1); } (void)bcopy((char *)&f,(char *)&addr.sin_addr,sizeof(f)); } addr.sin_port = htons(portnum); addr.sin_family = AF_INET; if((fd = socket(AF_INET,SOCK_STREAM,0)) < 0) { perror("socket"); exit(1); } if(connect(fd,&addr,sizeof(addr)) < 0) { perror("connect"); exit(1); } while((red = read(fd,rbuf,sizeof(rbuf))) > 0) write(1,rbuf,red); exit(0); }