On Sun, Jun 17, 2012 at 01:08:25AM +0200, Alexander Hall wrote: > On 06/16/12 01:07, Christiano F. Haesbaert wrote: > >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 > > NAN might be more appropriate than 0.
Why is that ? > > > > > > > > >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). > > Are you sure about this? Looking at the code, I didn't get that > impression (not that I claim to know much about event(3)), but > adding a new connection every 0.5 seconds did not stop the output > either. You're correct, my mistake I had missed the following in set_slice_timer(): if (evtimer_pending(&mainstats.timer, NULL)) return; Even though I think it makes more sense, no ? > > You might also want sth like this, for completeness: > > @@ -1208,6 +1210,7 @@ main(int argc, char **argv) > } else { > print_tcp_header(); > evtimer_set(&mainstats.timer, tcp_process_slice, NULL); > + tcp_process_slice(0, 0, NULL); I considered adding: + timerclear(&tv); + evtimer_add(&mainstats.timer, &tv); But the output looks funky since the headers don't match the output: ./tcpbench -s elapsed_ms bytes mbps bwidth Conn: 0 Mbps: 0.000 Peak Mbps: 0.000 Avg Mbps: 0.000 But I'm not too strong about it. > } > > if (ptb->sflag) > > /Alexander > > > > > > >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)