version 1.8, 2008/09/18 10:23:33 |
version 1.9, 2009/08/13 14:19:43 |
|
|
sig_atomic_t done = 0; |
sig_atomic_t done = 0; |
sig_atomic_t print_stats = 0; |
sig_atomic_t print_stats = 0; |
|
|
|
u_int rdomain; |
|
|
struct statctx { |
struct statctx { |
struct timeval t_start, t_last, t_cur; |
struct timeval t_start, t_last, t_cur; |
unsigned long long bytes; |
unsigned long long bytes; |
|
|
fprintf(stderr, |
fprintf(stderr, |
"usage: tcpbench -l\n" |
"usage: tcpbench -l\n" |
" tcpbench [-v] [-B buf] [-k kvars] [-n connections]" |
" tcpbench [-v] [-B buf] [-k kvars] [-n connections]" |
" [-p port] [-r rate]\n" |
" [-p port] [-r rate] [-V rdomain]\n" |
" [-S space] hostname\n" |
" [-S space] hostname\n" |
" tcpbench -s [-v] [-B buf] [-k kvars] [-p port] [-r rate]" |
" tcpbench -s [-v] [-B buf] [-k kvars] [-p port] [-r rate]" |
" [-S space]\n"); |
" [-S space] [-V rdomain]\n"); |
exit(1); |
exit(1); |
} |
} |
|
|
|
|
warn("socket"); |
warn("socket"); |
continue; |
continue; |
} |
} |
|
if (rdomain && ai->ai_family == AF_INET) { |
|
if (setsockopt(sock, IPPROTO_IP, SO_RDOMAIN, |
|
&rdomain, sizeof(rdomain)) == -1) |
|
err(1, "setsockopt SO_RDOMAIN"); |
|
} |
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, |
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, |
&on, sizeof(on)) == -1) |
&on, sizeof(on)) == -1) |
warn("reuse port"); |
warn("reuse port"); |
|
|
warn("socket"); |
warn("socket"); |
continue; |
continue; |
} |
} |
|
if (rdomain && ai->ai_family == AF_INET) { |
|
if (setsockopt(sock, IPPROTO_IP, SO_RDOMAIN, |
|
&rdomain, sizeof(rdomain)) == -1) |
|
err(1, "setsockopt SO_RDOMAIN"); |
|
} |
if (Sflag) { |
if (Sflag) { |
if (setsockopt(sock, SOL_SOCKET, SO_SNDBUF, |
if (setsockopt(sock, SOL_SOCKET, SO_SNDBUF, |
&Sflag, sizeof(Sflag)) == -1) |
&Sflag, sizeof(Sflag)) == -1) |
|
|
|
|
struct nlist nl[] = { { "_tcbtable" }, { "" } }; |
struct nlist nl[] = { { "_tcbtable" }, { "" } }; |
|
|
while ((ch = getopt(argc, argv, "B:hlk:n:p:r:sS:v")) != -1) { |
while ((ch = getopt(argc, argv, "B:hlk:n:p:r:sS:vV:")) != -1) { |
switch (ch) { |
switch (ch) { |
case 'l': |
case 'l': |
list_kvars(); |
list_kvars(); |
|
|
break; |
break; |
case 'v': |
case 'v': |
vflag++; |
vflag++; |
|
break; |
|
case 'V': |
|
rdomain = (unsigned int)strtonum(optarg, 0, |
|
RT_TABLEID_MAX, &errstr); |
|
if (errstr) |
|
errx(1, "rdomain value is %s: %s", |
|
errstr, optarg); |
break; |
break; |
case 'n': |
case 'n': |
nconn = strtonum(optarg, 0, 65535, &errstr); |
nconn = strtonum(optarg, 0, 65535, &errstr); |