Annotation of 43BSDTahoe/new/dsh/src/ipc.c, revision 1.1.1.1

1.1       root        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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.