void sockstats(PNATState pData) { char buff[256]; size_t n; struct socket *so, *so_next; lprint("\n"); lprint( "Proto[state] Sock Local Address, Port Remote Address, Port RecvQ SendQ\n"); QSOCKET_FOREACH(so, so_next, tcp) /* { */ n = RTStrPrintf(buff, sizeof(buff), "tcp[%s]", so->so_tcpcb?tcpstates[so->so_tcpcb->t_state]:"NONE"); while (n < 17) buff[n++] = ' '; buff[17] = 0; lprint("%s %3d %15s %5d ", buff, so->s, inet_ntoa(so->so_laddr), RT_N2H_U16(so->so_lport)); lprint("%15s %5d %5d %5d\n", inet_ntoa(so->so_faddr), RT_N2H_U16(so->so_fport), SBUF_LEN(&so->so_rcv), SBUF_LEN(&so->so_snd)); LOOP_LABEL(tcp, so, so_next); }
/* * Fast timeout routine for processing delayed acks */ void tcp_fasttimo(PNATState pData) { register struct socket *so, *so_next; register struct tcpcb *tp; LogFlowFuncEnter(); so = tcb.so_next; if (so) QSOCKET_FOREACH (so, so_next, tcp) /* { */ if ( (tp = (struct tcpcb *)so->so_tcpcb) && (tp->t_flags & TF_DELACK)) { tp->t_flags &= ~TF_DELACK; tp->t_flags |= TF_ACKNOW; tcpstat.tcps_delack++; TCP_OUTPUT(pData, tp); } LOOP_LABEL(tcp, so, so_next); }