Hi, this behaviour is really annoying, in tcp server, when the last
user disconnects, we don't update the status line, so it keeps showing
1 connected user, it would be better to show Conn: 0.
BEFORE
sauron:haesbaert: tcpbench -s
elapsed_ms bytes mbps bwidth
1000 645674612 5165.397 100.00%
Conn: 1 Mbps: 5165.397 Peak Mbps: 5165.397 Avg Mbps: 5165.397
2000 673254000 5386.032 100.00%
Conn: 1 Mbps: 5386.032 Peak Mbps: 5386.032 Avg Mbps: 5386.032
AFTER
gimli:obj: ./tcpbench -s
elapsed_ms bytes mbps bwidth
1000 314833908 2518.671 100.00%
Conn: 1 Mbps: 2518.671 Peak Mbps: 2518.671 Avg Mbps: 2518.671
Conn: 0 Mbps: 0.000 Peak Mbps: 2518.671 Avg Mbps: 0.000
Also, only start timer if this is the first connection, this prevents
the display from not running while we have clients connecting (since
it always pushes the display 1 second in the future).
Index: tcpbench.c
===================================================================
RCS file: /cvs/src/usr.bin/tcpbench/tcpbench.c,v
retrieving revision 1.35
diff -d -u -p -r1.35 tcpbench.c
--- tcpbench.c 8 May 2012 01:39:58 -0000 1.35
+++ tcpbench.c 15 Jun 2012 23:04:23 -0000
@@ -568,7 +568,7 @@ tcp_process_slice(int fd, short event, v
mainstats.peak_mbps = slice_mbps;
printf("Conn: %3d Mbps: %12.3Lf Peak Mbps: %12.3Lf Avg Mbps: %12.3Lf\n",
mainstats.nconns, slice_mbps, mainstats.peak_mbps,
- slice_mbps / mainstats.nconns);
+ mainstats.nconns ? slice_mbps / mainstats.nconns : 0);
mainstats.slice_bytes = 0;
set_slice_timer(mainstats.nconns > 0);
@@ -657,7 +657,6 @@ tcp_server_handle_sc(int fd, short event
free(sc);
mainstats.nconns--;
- set_slice_timer(mainstats.nconns > 0);
return;
}
if (ptb->vflag >= 3)
@@ -723,7 +722,8 @@ tcp_server_accept(int fd, short event, v
event_add(&sc->ev, NULL);
TAILQ_INSERT_TAIL(&sc_queue, sc, entry);
mainstats.nconns++;
- set_slice_timer(mainstats.nconns > 0);
+ if (mainstats.nconns == 1)
+ set_slice_timer(1);
if (ptb->vflag)
fprintf(stderr, "Accepted connection from %s, fd = %d\n",
tmp, sc->fd);
@@ -934,7 +934,8 @@ client_init(struct addrinfo *aitop, int
event_add(&sc->ev, NULL);
TAILQ_INSERT_TAIL(&sc_queue, sc, entry);
mainstats.nconns++;
- set_slice_timer(mainstats.nconns > 0);
+ if (mainstats.nconns == 1)
+ set_slice_timer(1);
}
freeaddrinfo(aitop);
if (aib != NULL)