1: #include <stdio.h>
   2: #include <sys/types.h>
   3: #include <sys/socket.h>
   4: #include <netinet/in.h>
   5: #include <netdb.h>
   6: #include <errno.h>
   7: 
   8: #define FIRSTPORT 1425
   9: #define LASTPORT 64000
  10: 
  11: /* some useful definitions */
  12: #define TRUE    1
  13: #define FALSE   0
  14: #define bool    char
  15: #define HOSTNAMESIZE    32
  16: 
  17: int errno;              /* the magic global */
  18: char    ourhostname[HOSTNAMESIZE];  /* local host name */
  19: long    ourhostaddr;            /* our host's address */
  20: bool    havehost = FALSE;       /* true if ourhost* is valid */
  21: 
  22: 
  23: /* get info about local host */
  24: getmyhoststuff()
  25: {
  26:     char    *temp;
  27: 
  28:     gethostname (ourhostname, HOSTNAMESIZE);
  29:     netaddr (ourhostname, &ourhostaddr);
  30:     havehost = TRUE;
  31: }
  32: 
  33: /* return our host's name */
  34: char *
  35: myhostname()
  36: {
  37:     if (!havehost) {
  38:     getmyhoststuff ();
  39:     }
  40:     return ourhostname;
  41: }
  42: 
  43: /* return our host's address */
  44: myhostaddr()
  45: {
  46:     if (!havehost) {
  47:     getmyhoststuff ();
  48:     }
  49:     return ourhostaddr;
  50: }
  51: 
  52: 
  53: /*
  54:  *	make a datagram socket
  55:  */
  56: makedgsocket (pptr)
  57: int *pptr;      /* port number */
  58: {
  59:     int     sock, i, rv;
  60:     struct sockaddr_in  sin;
  61: 
  62:     /* set up INET address */
  63:     sin.sin_family = AF_INET;
  64:     sin.sin_addr.s_addr = myhostaddr();
  65:     bzero (sin.sin_zero, 8);
  66: 
  67:     /* get a socket */
  68:     sock = socket (AF_INET, SOCK_DGRAM, 0, 0);
  69:     if (sock < 0) {
  70:     error ("opening datagram socket");
  71:     }
  72:     if (*pptr == 0) {
  73:     for (*pptr = FIRSTPORT; *pptr < LASTPORT; *pptr += 11) {
  74:         sin.sin_port = htons((u_short)*pptr);
  75:         rv = bind (sock, &sin, sizeof(sin), 0);
  76:         if (rv == 0) {
  77:         break;
  78:         }
  79:     }
  80:     } else {
  81:     sin.sin_port = htons((u_short)*pptr);
  82:     rv = bind (sock, &sin, sizeof(sin), 0);
  83:     }
  84:     if (rv != 0) {
  85:     close (sock);
  86:     error ("binding datagram socket");
  87:     }
  88: 
  89:     return (sock);
  90: }
  91: 
  92: 
  93: /* get the network address of a machine */
  94: long
  95: netaddr (name, addrptr)
  96: char *name;
  97: char *addrptr;
  98: {
  99:     long    iaddr;
 100:     struct hostent *hp, *gethostbyname();
 101: 
 102:     hp = gethostbyname(name);
 103:     bcopy (hp->h_addr, addrptr, hp->h_length);
 104: }
 105: 
 106: /* are these two names synonymns? */
 107: aresynonyms (name1, name2)
 108: char *name1, *name2;
 109: {
 110:     struct hostent *hp, *gethostbyname();
 111:     char **ptr;
 112: 
 113:     hp = gethostbyname(name1);
 114:     if (hp == 0)
 115:     return (FALSE);
 116:     if (strcmp (name2, hp->h_name) == 0)
 117:     return (TRUE);
 118:     for (ptr = hp->h_aliases; *ptr != 0; ptr++) {
 119:     if (strcmp (name2, *ptr) == 0)
 120:         return (TRUE);
 121:     }
 122:     return (FALSE);
 123: }
 124: 
 125: /* receive a datagram via the inet */
 126: recvdg (fd, buf, len)
 127: int fd;         /* socket to receive over */
 128: char * buf;     /* buffer to receive into */
 129: int len;        /* size in bytes of that buffer */
 130: {
 131:     struct sockaddr faddr;
 132:     int flen;
 133:     int rv, i;
 134: 
 135:     flen = sizeof (faddr);
 136:     rv = recvfrom (fd, buf, len, 0, &faddr, &flen);
 137: 
 138:     return (rv);
 139: }
 140: 
 141: /* send an inet datagram */
 142: senddg (fd, buf, len, destname, destport)
 143: int fd;         /* socket to send via */
 144: char *buf;      /* buffer to send */
 145: int len;        /* number of bytes to send */
 146: char *destname;     /* name of host we're sending to */
 147: int destport;       /* the udp port on that node */
 148: {
 149:     struct sockaddr_in sin;
 150:     int rv, i;
 151:     char *ptr;
 152: 
 153:     sin.sin_family = AF_INET;
 154:     bzero (sin.sin_zero, 8);
 155:     netaddr (destname, &(sin.sin_addr));
 156:     sin.sin_port = htons ((u_short)destport);
 157:     rv = sendto (fd, buf, len, 0, &sin, sizeof(sin));
 158:     return (rv);
 159: }

Defined functions

aresynonyms defined in line 107; used 3 times
getmyhoststuff defined in line 24; used 2 times
makedgsocket defined in line 56; used 2 times
myhostaddr defined in line 44; used 2 times
myhostname defined in line 34; used 7 times
netaddr defined in line 94; used 2 times
recvdg defined in line 126; used 1 times
senddg defined in line 142; used 1 times

Defined variables

errno defined in line 17; never used
ourhostaddr defined in line 19; used 2 times
ourhostname defined in line 18; used 3 times

Defined macros

FALSE defined in line 13; used 3 times
FIRSTPORT defined in line 8; used 1 times
  • in line 73
HOSTNAMESIZE defined in line 15; used 2 times
LASTPORT defined in line 9; used 1 times
  • in line 73
TRUE defined in line 12; used 3 times
bool defined in line 14; used 1 times
  • in line 20
Last modified: 1983-07-21
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 742
Valid CSS Valid XHTML 1.0 Strict