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

📄 wrapper-new-ttcp.cpp

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 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, 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 + -