From 5a1b0a0c28166ab99ca6fb4aee8391475efbb1c3 Mon Sep 17 00:00:00 2001 From: Paul Melnikov Date: Thu, 3 Jun 2021 17:16:35 +0700 Subject: [PATCH] Attempt to add TCP keepalive functionality. --- src/AsyncTCP.cpp | 12 ++++++++++++ src/AsyncTCP.h | 2 ++ 2 files changed, 14 insertions(+) diff --git a/src/AsyncTCP.cpp b/src/AsyncTCP.cpp index 89ff6ee3..6003bd2d 100644 --- a/src/AsyncTCP.cpp +++ b/src/AsyncTCP.cpp @@ -1057,6 +1057,18 @@ bool AsyncClient::getNoDelay(){ return tcp_nagle_disabled(_pcb); } +void AsyncClient::setKeepAlive(uint32_t ms, uint8_t cnt){ + if(ms!=0) { + _pcb->so_options |= SOF_KEEPALIVE; //Turn on TCP Keepalive for the given pcb + // Set the time between keepalive messages in milli-seconds + _pcb->keep_idle = ms; + _pcb->keep_intvl = ms; + _pcb->keep_cnt = cnt; //The number of unanswered probes required to force closure of the socket + } else { + _pcb->so_options &= ~SOF_KEEPALIVE; //Turn off TCP Keepalive for the given pcb + } +} + uint16_t AsyncClient::getMss(){ if(!_pcb) { return 0; diff --git a/src/AsyncTCP.h b/src/AsyncTCP.h index ac87deda..75838515 100644 --- a/src/AsyncTCP.h +++ b/src/AsyncTCP.h @@ -99,6 +99,8 @@ class AsyncClient { void setNoDelay(bool nodelay); bool getNoDelay(); + void setKeepAlive(uint32_t ms, uint8_t cnt); + uint32_t getRemoteAddress(); uint16_t getRemotePort(); uint32_t getLocalAddress();