/*
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);
}