From 7ed332d99d448e6c8529ac7cb44f8411453ab7fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Obrembski?= Date: Tue, 17 Nov 2020 11:23:43 +0100 Subject: [PATCH] Added setConnectionTimeout to EthernetClient for Linux --- .../Linux/drivers/core/EthernetClient.cpp | 11 +++++++++-- hal/architecture/Linux/drivers/core/EthernetClient.h | 9 +++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/hal/architecture/Linux/drivers/core/EthernetClient.cpp b/hal/architecture/Linux/drivers/core/EthernetClient.cpp index a75884e4d..02f7a55d0 100644 --- a/hal/architecture/Linux/drivers/core/EthernetClient.cpp +++ b/hal/architecture/Linux/drivers/core/EthernetClient.cpp @@ -33,11 +33,11 @@ #include #include "log.h" -EthernetClient::EthernetClient() : _sock(-1) +EthernetClient::EthernetClient() : _sock(-1), socketTimeout(1000) { } -EthernetClient::EthernetClient(int sock) : _sock(sock) +EthernetClient::EthernetClient(int sock) : _sock(sock), socketTimeout(1000) { } @@ -89,6 +89,13 @@ int EthernetClient::connect(const char* host, uint16_t port) continue; } + // Sets the socket timeout + struct timeval timeout; + timeout.tv_sec = 0; + timeout.tv_usec = socketTimeout * 1000000; + setsockopt(_sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout)); + setsockopt(_sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout)); + break; } diff --git a/hal/architecture/Linux/drivers/core/EthernetClient.h b/hal/architecture/Linux/drivers/core/EthernetClient.h index 126d12264..59533f931 100644 --- a/hal/architecture/Linux/drivers/core/EthernetClient.h +++ b/hal/architecture/Linux/drivers/core/EthernetClient.h @@ -200,12 +200,21 @@ class EthernetClient : public Client { return !this->operator==(rhs); }; + /** + * @brief Set socket timeout. + * + */ + void setConnectionTimeout(uint16_t timeoutInMilis) + { + socketTimeout = timeoutInMilis; + }; friend class EthernetServer; private: int _sock; //!< @brief Network socket file descriptor. IPAddress _srcip; //!< @brief Local ip to bind to. + uint16_t socketTimeout; //!< @brief Socket timeout in miliseconds. }; #endif