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

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;
     }