/* Copyright (C) 1991, Marcus J. Ranum. All rights reserved. */ #include "os.h" #define STREAMPORT 6889 #define ENVHOST "MUDWHOSERVER" #define ENVPORT "MUDWHOPORT" int main (int ac, char *av[]) { struct sockaddr_in addr; struct hostent *hp; SOCKET 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 ((int)*p))) p++; WIN32STARTUP /* 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)) == INADDR_NONE) { 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)) == INVALID_SOCKET) { perror ("socket"); WIN32CLEANUP exit (1); } if (connect (fd, (struct sockaddr*)&addr, sizeof (addr)) == SOCKET_ERROR) { perror ("connect"); WIN32CLEANUP exit (1); } while ((red = recv (fd, rbuf, sizeof (rbuf), 0)) > 0) send (1, rbuf, red, 0); WIN32CLEANUP exit (0); }