diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2024-12-04 08:41:03 +0100 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2024-12-04 08:41:03 +0100 |
commit | 30a100d4fbc17972d71f75695441bbedeee076ef (patch) | |
tree | 5ef9d2bafe676ecc96ba470757a396f3045f4e0f /lib/Socket.h | |
parent | 0251f975400ad019374283cdf79fbdc4dd1d350f (diff) | |
download | dabmux-30a100d4fbc17972d71f75695441bbedeee076ef.tar.gz dabmux-30a100d4fbc17972d71f75695441bbedeee076ef.tar.bz2 dabmux-30a100d4fbc17972d71f75695441bbedeee076ef.zip |
common: Update Socketnext
Diffstat (limited to 'lib/Socket.h')
-rw-r--r-- | lib/Socket.h | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/lib/Socket.h b/lib/Socket.h index 1320a64..7709145 100644 --- a/lib/Socket.h +++ b/lib/Socket.h @@ -31,9 +31,11 @@ #include "ThreadsafeQueue.h" #include <cstdlib> #include <atomic> -#include <string> +#include <chrono> #include <list> #include <memory> +#include <optional> +#include <string> #include <thread> #include <vector> @@ -236,6 +238,8 @@ class TCPClient { TCPSocket m_sock; std::string m_hostname; int m_port; + + std::optional<std::chrono::steady_clock::time_point> m_last_received_packet_ts; }; /* Helper class for TCPDataDispatcher, contains a queue of pending data and @@ -329,10 +333,18 @@ class TCPSendClient { public: TCPSendClient(const std::string& hostname, int port); ~TCPSendClient(); + TCPSendClient(const TCPSendClient&) = delete; + TCPSendClient& operator=(const TCPSendClient&) = delete; - /* Throws a runtime_error on error - */ - void sendall(const std::vector<uint8_t>& buffer); + + struct ErrorStats { + std::string last_error = ""; + size_t num_reconnects = 0; + bool has_seen_new_errors = false; + }; + + /* Throws a runtime_error when the process thread isn't running */ + ErrorStats sendall(const std::vector<uint8_t>& buffer); private: void process(); @@ -349,6 +361,11 @@ class TCPSendClient { std::string m_exception_data; std::thread m_sender_thread; TCPSocket m_listener_socket; + + std::atomic<size_t> m_num_reconnects = ATOMIC_VAR_INIT(0); + size_t m_num_reconnects_prev = 0; + std::mutex m_error_mutex; + std::string m_last_error = ""; }; } |