diff options
| author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2022-08-19 17:19:16 +0200 | 
|---|---|---|
| committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2022-08-19 17:19:16 +0200 | 
| commit | 8007dffae5fee4fcc81fcb5f888e0ee138db6e1e (patch) | |
| tree | f0ef8f06c046ce7242736078367000769b1fff4a /lib/Socket.h | |
| parent | fe2c5e875e6410376f4dc2e9257b3beaf52d33e0 (diff) | |
| download | ODR-SourceCompanion-8007dffae5fee4fcc81fcb5f888e0ee138db6e1e.tar.gz ODR-SourceCompanion-8007dffae5fee4fcc81fcb5f888e0ee138db6e1e.tar.bz2 ODR-SourceCompanion-8007dffae5fee4fcc81fcb5f888e0ee138db6e1e.zip | |
Common c23bfcb, fe2a905, 036201c with socket changes
Diffstat (limited to 'lib/Socket.h')
| -rw-r--r-- | lib/Socket.h | 14 | 
1 files changed, 12 insertions, 2 deletions
| diff --git a/lib/Socket.h b/lib/Socket.h index f5143a0..d8242e2 100644 --- a/lib/Socket.h +++ b/lib/Socket.h @@ -2,7 +2,7 @@     Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Her Majesty the     Queen in Right of Canada (Communications Research Center Canada) -   Copyright (C) 2020 +   Copyright (C) 2022     Matthias P. Braendli, matthias.braendli@mpb.li      http://www.opendigitalradio.org @@ -173,6 +173,11 @@ class TCPSocket {          void listen(int port, const std::string& name);          void close(void); +        /* Enable TCP keepalive. See +         * https://tldp.org/HOWTO/TCP-Keepalive-HOWTO/usingkeepalive.html +         */ +        void enable_keepalive(int time, int intvl, int probes); +          /* throws a runtime_error on failure, an invalid socket on timeout */          TCPSocket accept(int timeout_ms); @@ -254,7 +259,7 @@ class TCPConnection  class TCPDataDispatcher  {      public: -        TCPDataDispatcher(size_t max_queue_size); +        TCPDataDispatcher(size_t max_queue_size, size_t buffers_to_preroll);          ~TCPDataDispatcher();          TCPDataDispatcher(const TCPDataDispatcher&) = delete;          TCPDataDispatcher& operator=(const TCPDataDispatcher&) = delete; @@ -266,11 +271,16 @@ class TCPDataDispatcher          void process();          size_t m_max_queue_size; +        size_t m_buffers_to_preroll; +          std::atomic<bool> m_running = ATOMIC_VAR_INIT(false);          std::string m_exception_data;          std::thread m_listener_thread;          TCPSocket m_listener_socket; + +        std::mutex m_mutex; +        std::deque<std::vector<uint8_t> > m_preroll_queue;          std::list<TCPConnection> m_connections;  }; | 
