📄 wrapper-new-ttcp.cpp
字号:
!= sizeof (Session_Control_Message)) ACE_ERROR_RETURN ((LM_ERROR, "%p recv session control failed\n", "ttcp"), -1); ACE_DEBUG ((LM_DEBUG, "received session control message" " nbuf %d, size %d\n", session_control_buf.nbuf_, session_control_buf.size_)); nbuf = session_control_buf.nbuf_; // ignore session_control_buf.size_ for now long cnt; while (nbuf--) { if (connection_stream.recv_n ((char *) message_buf, sizeof (long)) != sizeof (long)) ACE_ERROR_RETURN ((LM_ERROR, "%p recv data control failed\n", "ttcp"), -1); cnt = connection_stream.recv_n (& (message_buf->data_), message_buf->size_); if (cnt != message_buf->size_) ACE_ERROR_RETURN ((LM_ERROR, "recv data failed\n"), -1); numCalls++; nbytes += cnt; if (connection_stream.send_n ((char *) &cnt, sizeof cnt) != sizeof cnt) ACE_ERROR_RETURN ((LM_ERROR, "%p send ack failed\n", "ttcp"), -1); } printf("Server finished. \n"); } /* if (errno) err ("IO"); */ // // stop the timer // (void) read_timer (stats, sizeof (stats)); if (udp && trans) { (void) Nwrite (connection_stream, message_buf, 4); /* rcvr end */ (void) Nwrite (connection_stream, message_buf, 4); /* rcvr end */ (void) Nwrite (connection_stream, message_buf, 4); /* rcvr end */ (void) Nwrite (connection_stream, message_buf, 4); /* rcvr end */ } if (cput <= 0.0) cput = 0.001; if (realt <= 0.0) realt = 0.001;#if defined (LM_RESULTS) if (trans && (title != 0)) { double tmp; FILE *fd; char filename[BUFSIZ]; ACE_OS::sprintf (filename, "%s.results", title); fd = fopen(filename,"a+"); if (new_line) fprintf(fd,"\n -l %ldk \t", data_buf_len/1024); tmp = ((double) nbytes) / realt; fprintf(fd,"%.2f ", tmp * 8.0 / 1024.0 / 1024.0); fclose(fd); }#endif fprintf (stdout, "ttcp%s: %ld bytes in %.2f real seconds = %s/sec +++\n", trans ? "-t" : "-r", nbytes, realt, outfmt (((double) nbytes) / realt)); if (verbose) { fprintf (stdout, "ttcp%s: %ld bytes in %.2f CPU seconds = %s/cpu sec\n", trans ? "-t" : "-r", nbytes, cput, outfmt (((double) nbytes) / cput)); } fprintf (stdout, "ttcp%s: %d I/O calls, msec/call = %.2f, calls/sec = %.2f\n", trans ? "-t" : "-r", numCalls, 1024.0 * realt / ((double) numCalls), ((double) numCalls) / realt); fprintf (stdout, "ttcp%s: %s\n", trans ? "-t" : "-r", stats); if (verbose) { fprintf (stdout, "ttcp%s: buffer address %#x\n", trans ? "-t" : "-r", message_buf); } exit (0);usage: fprintf (stderr, Usage); return 1;}voiderr (char *s){ fprintf (stderr, "ttcp%s: ", trans ? "-t" : "-r"); perror (s); fprintf (stderr, "errno=%d\n", errno); exit (1);}voidmes (char *s){ fprintf (stderr, "ttcp%s: %s\n", trans ? "-t" : "-r", s);}voidpattern (register char *cp, register int cnt){ register char c; c = 0; while (cnt-- > 0) { while (!isprint ((c & 0x7F))) c++; *cp++ = (c++ & 0x7F); }}char *outfmt (double b){ static char obuf[50]; switch (fmt) { case 'G': sprintf (obuf, "%.2f GB", b / 1024.0 / 1024.0 / 1024.0); break; default: case 'K': sprintf (obuf, "%.2f KB", b / 1024.0); break; case 'M': sprintf (obuf, "%.2f MB", b / 1024.0 / 1024.0); break; case 'g': sprintf (obuf, "%.2f Gbit", b * 8.0 / 1024.0 / 1024.0 / 1024.0); break; case 'k': sprintf (obuf, "%.2f Kbit", b * 8.0 / 1024.0); break; case 'm': sprintf (obuf, "%.2f Mbit", b * 8.0 / 1024.0 / 1024.0); break; } return obuf;}static struct itimerval itime0; /* Time at which timing started */static struct rusage ru0; /* Resource utilization at the start */#if defined(SYSV)/*ARGSUSED */static voidgetrusage (int ignored, register struct rusage *ru){ struct tms buf; times (&buf); /* Assumption: HZ <= 2147 (LONG_MAX/1000000) */ ru->ru_stime.tv_sec = buf.tms_stime / HZ; ru->ru_stime.tv_usec = ((buf.tms_stime % HZ) * 1000000) / HZ; ru->ru_utime.tv_sec = buf.tms_utime / HZ; ru->ru_utime.tv_usec = ((buf.tms_utime % HZ) * 1000000) / HZ;}#endif /* SYSV *//* * P R E P _ T I M E R */voidprep_timer (){ itime0.it_interval.tv_sec = 0; itime0.it_interval.tv_usec = 0; // itime0.it_value.tv_sec = LONG_MAX / 22; /* greatest possible value , itimer() count backwards */ itime0.it_value.tv_sec = 3600; itime0.it_value.tv_usec = 0; getrusage (RUSAGE_SELF, &ru0); fprintf(stdout, "\n"); fprintf(stdout, "beginning user time = %d sec and %d usec\n", ru0.ru_utime.tv_sec, ru0.ru_utime.tv_usec); fprintf(stdout, "beginning sys time = %d sec and %d usec\n", ru0.ru_stime.tv_sec, ru0.ru_stime.tv_usec); /* Init REAL Timer */ if (setitimer (ITIMER_REAL, &itime0, NULL)) { perror ("Setting 'itimer' REAL failed"); return; } fprintf(stdout, "Beginning transaction time = %d sec and %d usec\n", itime0.it_value.tv_sec, itime0.it_value.tv_usec);}/* * R E A D _ T I M E R * */doubleread_timer (char *str, int len){ struct itimerval itimedol; struct rusage ru1; struct timeval td; struct timeval tend, tstart; char line[132]; getrusage (RUSAGE_SELF, &ru1); fprintf(stdout, "final user time = %d sec and %d usec\n", ru1.ru_utime.tv_sec, ru1.ru_utime.tv_usec); fprintf(stdout, "final sys time = %d sec and %d usec\n", ru1.ru_stime.tv_sec, ru1.ru_stime.tv_usec); if (getitimer (ITIMER_REAL, &itimedol)) { perror ("Getting 'itimer' REAL failed"); return (0.0); } fprintf(stdout, "End transaction time = %d sec and %d usec\n", itimedol.it_value.tv_sec, itimedol.it_value.tv_usec); prusage (&ru0, &ru1, &itime0.it_value, &itimedol.it_value, line); (void) strncpy (str, line, len); /* Get real time */ tvsub (&td, &itime0.it_value, &itimedol.it_value); realt = td.tv_sec + ((double) td.tv_usec) / 1000000; /* Get CPU time (user+sys) */ tvadd (&tend, &ru1.ru_utime, &ru1.ru_stime); tvadd (&tstart, &ru0.ru_utime, &ru0.ru_stime); tvsub (&td, &tend, &tstart); cput = td.tv_sec + ((double) td.tv_usec) / 1000000; if (cput < 0.00001) cput = 0.00001; return (cput);}static voidprusage (register struct rusage *r0, struct rusage *r1, struct timeval *b, struct timeval *e, char *outp){ struct timeval tdiff; register time_t t; register char *cp; register int i; int ms; t = (r1->ru_utime.tv_sec - r0->ru_utime.tv_sec) * 1000 + (r1->ru_utime.tv_usec - r0->ru_utime.tv_usec) / 100000 + (r1->ru_stime.tv_sec - r0->ru_stime.tv_sec) * 1000 + (r1->ru_stime.tv_usec - r0->ru_stime.tv_usec) / 100000; ms = -((e->tv_sec - b->tv_sec) * 1000 + (e->tv_usec - b->tv_usec) / 1000);/* in milliseconds */#define END(x) {while(*x) x++;}#if defined(SYSV) cp = "%Uuser %Ssys %Ereal %P";#else#if defined(sgi) /* IRIX 3.3 will show 0 for %M,%F,%R,%C */ cp = "%Uuser %Ssys %Ereal %P %Mmaxrss %F+%Rpf %Ccsw";#else cp = "%Uutime %Sstime %Edtime %P cpu occupancy"; /* cp = "%Uuser %Ssys %Ereal %P %Xi+%Dd %Mmaxrss %F+%Rpf %Ccsw";*/#endif#endif for (; *cp; cp++) { if (*cp != '%') *outp++ = *cp; else if (cp[1]) switch (*++cp) { case 'U': tvsub (&tdiff, &r1->ru_utime, &r0->ru_utime); /* sprintf (outp, "%d.%01d", tdiff.tv_sec, tdiff.tv_usec);*/ sprintf (outp, "%f", (tdiff.tv_sec + tdiff.tv_usec/1000000.0)); END (outp); break; case 'S': tvsub (&tdiff, &r1->ru_stime, &r0->ru_stime); /* sprintf (outp, "%d.%01d", tdiff.tv_sec, tdiff.tv_usec);*/ sprintf (outp, "%f", (tdiff.tv_sec + tdiff.tv_usec/1000000.0)); END (outp); break; case 'E': psecs (ms / 1000, outp); END (outp); break; case 'P': sprintf (outp, "%f%%", (t * 100.0 / ((ms ? ms : 1)))); END (outp); break;#if !defined(SYSV) case 'W': i = r1->ru_nswap - r0->ru_nswap; sprintf (outp, "%d", i); END (outp); break; case 'X': sprintf (outp, "%d", t == 0 ? 0 : (r1->ru_ixrss - r0->ru_ixrss) / t); END (outp); break; case 'D': sprintf (outp, "%d", t == 0 ? 0 : (r1->ru_idrss + r1->ru_isrss - (r0->ru_idrss + r0->ru_isrss)) / t); END (outp); break; case 'K': sprintf (outp, "%d", t == 0 ? 0 : ((r1->ru_ixrss + r1->ru_isrss + r1->ru_idrss) - (r0->ru_ixrss + r0->ru_idrss + r0->ru_isrss)) / t); END (outp); break; case 'M': sprintf (outp, "%d", r1->ru_maxrss / 2); END (outp); break; case 'F': sprintf (outp, "%d", r1->ru_majflt - r0->ru_majflt); END (outp); break; case 'R': sprintf (outp, "%d", r1->ru_minflt - r0->ru_minflt); END (outp); break; case 'I': sprintf (outp, "%d", r1->ru_inblock - r0->ru_inblock); END (outp); break; case 'O': sprintf (outp, "%d", r1->ru_oublock - r0->ru_oublock); END (outp); break; case 'C': sprintf (outp, "%d+%d", r1->ru_nvcsw - r0->ru_nvcsw, r1->ru_nivcsw - r0->ru_nivcsw); END (outp); break;#endif /* !SYSV */ } } *outp = '\0';}static voidtvadd (struct timeval *tsum, struct timeval *t0, struct timeval *t1){ tsum->tv_sec = t0->tv_sec + t1->tv_sec; tsum->tv_usec = t0->tv_usec + t1->tv_usec; if (tsum->tv_usec > 1000000) tsum->tv_sec++, tsum->tv_usec -= 1000000;}static voidtvsub (struct timeval *tdiff, struct timeval *t1, struct timeval *t0){ tdiff->tv_sec = t1->tv_sec - t0->tv_sec; tdiff->tv_usec = t1->tv_usec - t0->tv_usec; if (tdiff->tv_usec < 0) tdiff->tv_sec--, tdiff->tv_usec += 1000000;}static voidpsecs (long l, register char *cp){ register int i; i = l / 3600; if (i) { sprintf (cp, "%d hours", i); END (cp); i = l % 3600; sprintf (cp, "%d minutes ", (i / 60)); sprintf (cp, "%d seconds ", (i % 60)); END (cp); } else { i = l; sprintf (cp, "%d minutes ", i / 60); END (cp); } i %= 60; *cp++ = ':'; sprintf (cp, "%d seconds ", i);}/* * N R E A D */intNread (ACE_SOCK_Stream &s, void *buf, int count){ numCalls++; return (s.recv (buf, count));}/* * N W R I T E */intNwrite (ACE_SOCK_Stream &s, void *buf, int count){ numCalls++; return s.send (buf, count);}voiddelay (int us){ struct timeval tv; tv.tv_sec = 0; tv.tv_usec = us; (void) select (1, (fd_set *) 0, (fd_set *) 0, (fd_set *) 0, &tv);}/* * M R E A D * * This function performs the function of a read(II) but will * call read(II) multiple times in order to get the requested * number of characters. This can be necessary because * network connections don't deliver data with the same * grouping as it is written with. Written by Robert S. Miles, BRL. */intmread (int fd, register char *bufp, unsigned n){ register unsigned count = 0; register int nread; do { nread = read (fd, bufp, n - count); numCalls++; if (nread < 0) { perror ("ttcp_mread"); return (-1); } if (nread == 0) return ((int) count); count += (unsigned) nread; bufp += nread; } while (count < n); return ((int) count);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -