⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wrapper-new-ttcp.cpp

📁 ace开发环境 用来开发网络程序 其运用了设计模式、多平台、C++等多种知识
💻 CPP
📖 第 1 页 / 共 2 页
字号:
          != 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, 0))    {      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 + -