Annotation of Net2/tests/benchmarks/inet/inetdgs.c, revision 1.1.1.1

1.1       root        1: #include <sys/types.h>
                      2: #include <sys/socket.h>
                      3: #include <sys/time.h>
                      4: #include <sys/resource.h>
                      5: #include <netinet/in.h>
                      6: 
                      7: #include <stdio.h>
                      8: #include <signal.h>
                      9: #include <setjmp.h>
                     10: #include <errno.h>
                     11: 
                     12: struct sockaddr_in sin;
                     13: jmp_buf        j;
                     14: int    catchsig();
                     15: 
                     16: main(argc, argv)
                     17:        char *argv[];
                     18: {
                     19:        int s, n;
                     20:        char buf[2 * BUFSIZ];
                     21:        struct rusage r1, r2;
                     22: 
                     23:        if (argc < 2) {
                     24:                printf("usage: %s port\n", argv[0]);
                     25:                exit(1);
                     26:        }
                     27:        s = socket(AF_INET, SOCK_DGRAM, 0);
                     28:        if (s < 0) {
                     29:                perror("inetdgs: socket");
                     30:                exit(1);
                     31:        }
                     32:        sin.sin_family = AF_INET;
                     33:        sin.sin_port = htons(atoi(argv[1]));
                     34:        if (bind(s, &sin, sizeof (sin)) < 0) {
                     35:                perror("inetdgs: bind");
                     36:                exit(1);
                     37:        }
                     38:        for (;;) {
                     39:                int count, ms, kb, fromlen;
                     40:                struct timeval t1, t2;
                     41:                struct sockaddr_in from;
                     42:                extern int errno;
                     43: 
                     44:                for (;;) {
                     45:                        fromlen = sizeof (from);
                     46:                        n = recvfrom(s, buf, sizeof (buf), 0, &from, &fromlen);
                     47:                        if (n < 0) {
                     48:                                if (errno != EINTR)
                     49:                                        perror("inetdgs: recvfrom");
                     50:                                continue;
                     51:                        }
                     52:                        if (strncmp(buf, "begin", 5) == 0)
                     53:                                break;
                     54:                }
                     55:                count = kb = 0;
                     56:                getrusage(RUSAGE_SELF, &r1);
                     57:                gettimeofday(&t1, (struct timezone *)0);
                     58:                for (;;) {
                     59:                        fromlen = sizeof (from);
                     60:                        n = recvfrom(s, buf, sizeof (buf), 0, &from, &fromlen);
                     61:                        if (n < 0) {
                     62:                                if (errno != EINTR)
                     63:                                        perror("inetdgs: recvfrom");
                     64:                                continue;
                     65:                        }
                     66:                        count++, kb += n;
                     67:                        if (strncmp(buf, "end", 3) == 0)
                     68:                                break;
                     69:                }
                     70:                gettimeofday(&t2, (struct timezone *)0);
                     71:                getrusage(RUSAGE_SELF, &r2);
                     72:                sleep(2);
                     73:                timevalsub(&t2, &t1);
                     74:                ms = t2.tv_usec / 1000;
                     75:                printf("%d msgs (%d bytes) in %d.%d secs", count,
                     76:                    kb, t2.tv_sec, ms / 100);
                     77:                printf(", %d bytes/msg, %6.2f kb/s, %4.1f ms/msg\n",
                     78:                    kb / count, (8. * kb) / (t2.tv_sec * 1024.),
                     79:                   (1000. * t2.tv_sec + ms) / count);
                     80:                timevalsub(&r2.ru_stime, &r1.ru_stime);
                     81:                timevalsub(&r2.ru_utime, &r1.ru_utime);
                     82:                r2.ru_nvcsw -= r1.ru_nvcsw;
                     83:                r2.ru_nivcsw -= r1.ru_nivcsw;
                     84:                printf("System %d.%d, user %d.%d, %d vcsw, %d ivcsw\n",
                     85:                    r2.ru_stime.tv_sec, r2.ru_stime.tv_usec / 100000,
                     86:                    r2.ru_utime.tv_sec, r2.ru_utime.tv_usec / 100000,
                     87:                    r2.ru_nvcsw, r2.ru_nivcsw);
                     88:        }
                     89: }
                     90: 
                     91: /*
                     92:  * Add and subtract routines for timevals.
                     93:  * N.B.: subtract routine doesn't deal with
                     94:  * results which are before the beginning,
                     95:  * it just gets very confused in this case.
                     96:  * Caveat emptor.
                     97:  */
                     98: timevaladd(t1, t2)
                     99:        struct timeval *t1, *t2;
                    100: {
                    101: 
                    102:        t1->tv_sec += t2->tv_sec;
                    103:        t1->tv_usec += t2->tv_usec;
                    104:        timevalfix(t1);
                    105: }
                    106: 
                    107: timevalsub(t1, t2)
                    108:        struct timeval *t1, *t2;
                    109: {
                    110: 
                    111:        t1->tv_sec -= t2->tv_sec;
                    112:        t1->tv_usec -= t2->tv_usec;
                    113:        timevalfix(t1);
                    114: }
                    115: 
                    116: timevalfix(t1)
                    117:        struct timeval *t1;
                    118: {
                    119: 
                    120:        if (t1->tv_usec < 0) {
                    121:                t1->tv_sec--;
                    122:                t1->tv_usec += 1000000;
                    123:        }
                    124:        if (t1->tv_usec >= 1000000) {
                    125:                t1->tv_sec++;
                    126:                t1->tv_usec -= 1000000;
                    127:        }
                    128: }

unix.superglobalmegacorp.com

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