A stack which works with or without an Mbed os library. Provides IPv4 or IPv6 with a full 1500 byte buffer.
Dependents: oldheating gps motorhome heating
Diff: tcp/tcb.c
- Revision:
- 74:c3756bfa960e
- Parent:
- 66:18a10c0b6d93
- Child:
- 78:9d8fc88df405
--- a/tcp/tcb.c Tue Oct 23 06:46:50 2018 +0000 +++ b/tcp/tcb.c Mon Oct 29 09:33:44 2018 +0000 @@ -24,7 +24,7 @@ for (int i = 0; i < TCB_COUNT; i++) { struct tcb* pTcb = tcbs + i; - if (pTcb->state != TCB_EMPTY && pTcb->port == port) return pTcb; + if (pTcb->state != TCB_EMPTY && pTcb->remPort == port) return pTcb; } return NULL; } @@ -37,6 +37,13 @@ } return NULL; } +struct tcb* TcbGetNext() +{ + static struct tcb* pTcbNext = tcbs; + struct tcb* pTcbThis = pTcbNext++; + if (pTcbNext >= tcbs + TCB_COUNT) pTcbNext = tcbs; + return pTcbThis; +} uint32_t TcbElapsed = 0; static void reap() @@ -48,15 +55,15 @@ uint32_t limit; switch (pTcb->state) { - case TCB_SYN_RECEIVED: limit = TIMEOUT_SYN_RECEIVED; break; - case TCB_ESTABLISHED: limit = TIMEOUT_ESTABLISHED; break; - case TCB_FIN_WAIT: limit = TIMEOUT_CLOSING; break; - case TCB_ACK_WAIT: limit = TIMEOUT_CLOSING; break; + case TCB_SYN_RECEIVED: limit = TIMEOUT_SYN_RECEIVED; break; + case TCB_ESTABLISHED: limit = TIMEOUT_ESTABLISHED; break; + case TCB_CLOSE_FIN_WAIT: limit = TIMEOUT_CLOSING; break; + case TCB_CLOSE_ACK_WAIT: limit = TIMEOUT_CLOSING; break; } - if (TcbElapsed - pTcb->elapsed > limit) + if (TcbElapsed - pTcb->lastSendTime > limit) { - if (TcpTrace) LogTimeF("Reaping TCB %d port %d\r\n", pTcb - tcbs, pTcb->port); + if (TcpTrace) LogTimeF("Reaping TCB %d port %d\r\n", pTcb - tcbs, pTcb->remPort); pTcb->state = TCB_EMPTY; }