diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2022-08-19 17:19:03 +0200 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2022-08-19 17:19:03 +0200 |
commit | 4c4c53c954fdb5d1a78aac23e1ac33e311f9924b (patch) | |
tree | feef32b569ff6c30d40d75c424f15849e033fa6e /contrib/Socket.h | |
parent | 5ba01f05ecfcf5990da3eaf4cae02679590890c6 (diff) | |
download | ODR-AudioEnc-4c4c53c954fdb5d1a78aac23e1ac33e311f9924b.tar.gz ODR-AudioEnc-4c4c53c954fdb5d1a78aac23e1ac33e311f9924b.tar.bz2 ODR-AudioEnc-4c4c53c954fdb5d1a78aac23e1ac33e311f9924b.zip |
Common c23bfcb, fe2a905, 036201c with socket changes
Diffstat (limited to 'contrib/Socket.h')
-rw-r--r-- | contrib/Socket.h | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/contrib/Socket.h b/contrib/Socket.h index f5143a0..d8242e2 100644 --- a/contrib/Socket.h +++ b/contrib/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; }; |