diff --git a/node/Constants.hpp b/node/Constants.hpp index e2a35dcee..03b04e68b 100644 --- a/node/Constants.hpp +++ b/node/Constants.hpp @@ -193,6 +193,14 @@ */ #define ZT_RX_QUEUE_SIZE 64 +/** + * Size of TX queue + * + * This is about 2mb, and can be decreased for small devices. A queue smaller + * than about 4 is probably going to cause a lot of lost packets. + */ +#define ZT_TX_QUEUE_SIZE 64 + /** * Length of secret key in bytes -- 256-bit -- do not change */ diff --git a/node/Switch.cpp b/node/Switch.cpp index eb1ebadb6..3fa8c31da 100644 --- a/node/Switch.cpp +++ b/node/Switch.cpp @@ -503,6 +503,9 @@ void Switch::send(void *tPtr,Packet &packet,bool encrypt) if (!_trySend(tPtr,packet,encrypt)) { { Mutex::Lock _l(_txQueue_m); + if (_txQueue.size() >= ZT_TX_QUEUE_SIZE) { + _txQueue.pop_front(); + } _txQueue.push_back(TXQueueEntry(dest,RR->node->now(),packet,encrypt)); } if (!RR->topology->getPeer(tPtr,dest))