e1421030a9
number of buffers. Bump PKGREVISION. Not feed upsteam as author seems to have disappeared :(
114 lines
3.8 KiB
Text
114 lines
3.8 KiB
Text
$NetBSD: patch-ab,v 1.3 2006/05/12 03:07:14 simonb Exp $
|
|
|
|
--- nttcp.c.orig 2000-12-18 21:16:54.000000000 +1100
|
|
+++ nttcp.c
|
|
@@ -136,9 +136,9 @@ void syslog(int priority, const char *me
|
|
#endif /* aix */
|
|
|
|
/*====================================================================*/
|
|
-#if defined(FreeBSD)
|
|
+#ifndef SIGCLD
|
|
#define SIGCLD SIGCHLD
|
|
-#endif /*FreeBSD*/
|
|
+#endif /*SIGCLD*/
|
|
|
|
/*====================================================================*/
|
|
#if defined(BSD42)
|
|
@@ -268,6 +268,7 @@ Usage: nttcp [local options] host [remot
|
|
\t-n# number of source bufs written to network (default 2048)\n\
|
|
\t-u use UDP instead of TCP\n\
|
|
\t-g#us gap in micro seconds between UDP packets (default 0s)\n\
|
|
+\t-U# run until a number of seconds have elapsed\n\
|
|
\t-d set SO_DEBUG in sockopt\n\
|
|
\t-D don't buffer TCP writes (sets TCP_NODELAY socket option)\n\
|
|
\t-w# set the send buffer space to #kilobytes, which is\n\
|
|
@@ -346,6 +347,7 @@ typedef struct {
|
|
int FixedDataSize; /* if>0: calc BufCnt/BufLen from this */
|
|
int Window, SndWin, RcvWin; /* TCP window sizes */
|
|
int Verbose; /* ==1: more diagnostics */
|
|
+ int RunTime; /* approximate runtime in seconds */
|
|
char *MulticastChannel; /* we send multicast traffic */
|
|
short MulticastPort;
|
|
int GapLength; /* Gap length between packets */
|
|
@@ -496,6 +498,13 @@ void StartTimer() {
|
|
SysCalls=0;
|
|
}
|
|
|
|
+int CheckTimer() {
|
|
+ TimeVal now;
|
|
+
|
|
+ gettimeofday(&now, (struct timezone *)0);
|
|
+ return opt.RunTime < (now.tv_sec - time0.tv_sec);
|
|
+}
|
|
+
|
|
void StopTimer(double *cput, double *realt) {
|
|
/* delivers in cput: the amount of cpu time in seconds
|
|
* in realt: the real time in seconds
|
|
@@ -878,6 +887,7 @@ void InitOptions(Options *opt) {
|
|
opt->Verbose=0; /* ==1: more diagnostics */
|
|
opt->GapLength=0; /* no delay, send as fast as possible */
|
|
opt->inetd= 0; /* ==1: run in inetd mode */
|
|
+ opt->RunTime = 0; /* run effectively forever (ie BufCnt is limiting factor) */
|
|
opt->Service= GetService(); /* the service-port to listen to */
|
|
opt->MulticastChannel= NULL;
|
|
opt->MulticastPort= 0;
|
|
@@ -1013,6 +1023,10 @@ void ParseOptions(int *ac, char **av[],
|
|
#endif /*MULTICAST*/
|
|
break;
|
|
}
|
|
+ case 'U':
|
|
+ GetSizeValue(&argc, &argv, &opt->RunTime, 1000000000,
|
|
+ "runtime");
|
|
+ break;
|
|
default: {
|
|
strcpy(MsgBuf, "unknown option: ");
|
|
strncat(MsgBuf, argv[0], sizeof(MsgBuf)-strlen(MsgBuf)-1);
|
|
@@ -1427,6 +1441,10 @@ int main(int argc, char *argv[]) {
|
|
sprintf(OptBuf, "-g%d", opt.GapLength);
|
|
StrVecAppend(RemOpt, OptBuf);
|
|
}
|
|
+ if (opt.RunTime > 0) {
|
|
+ sprintf(OptBuf, "-U%d", opt.RunTime);
|
|
+ StrVecAppend(RemOpt, OptBuf);
|
|
+ }
|
|
if (opt.MulticastChannel) {
|
|
sprintf(OptBuf, "-m%s:%d",
|
|
opt.MulticastChannel, opt.MulticastPort);
|
|
@@ -1781,9 +1799,17 @@ int main(int argc, char *argv[]) {
|
|
else
|
|
Pattern(buf, opt.BufLen);
|
|
StartTimer();
|
|
- while (n-- && Nwrite(fd, buf, opt.BufLen) == opt.BufLen) {
|
|
+ while (Nwrite(fd, buf, opt.BufLen) == opt.BufLen) {
|
|
nBytes+= opt.BufLen;
|
|
nBuffer++;
|
|
+ if (opt.RunTime == 0) {
|
|
+ if (--n == 0)
|
|
+ break;
|
|
+ } else {
|
|
+ /* XXX: tune how often to check if timer has expired? */
|
|
+ if ((nBuffer % 100 == 0) && CheckTimer())
|
|
+ break;
|
|
+ }
|
|
}
|
|
StopTimer(&cput, &realt);
|
|
opt.GapLength= 0;
|
|
@@ -1797,9 +1823,17 @@ int main(int argc, char *argv[]) {
|
|
nBytes= 0;
|
|
nBuffer= 0;
|
|
StartTimer();
|
|
- while (n-- && Nwrite(fd, buf, opt.BufLen) == opt.BufLen) {
|
|
+ while (Nwrite(fd, buf, opt.BufLen) == opt.BufLen) {
|
|
nBytes+= opt.BufLen;
|
|
nBuffer++;
|
|
+ if (opt.RunTime == 0) {
|
|
+ if (--n == 0)
|
|
+ break;
|
|
+ } else {
|
|
+ /* XXX: tune how often to check if timer has expired? */
|
|
+ if ((nBuffer % 100 == 0) && CheckTimer())
|
|
+ break;
|
|
+ }
|
|
}
|
|
StopTimer(&cput, &realt);
|
|
}
|