From 0281065b24661493253736fbb325cba40b0dcde5 Mon Sep 17 00:00:00 2001 From: lo-simon Date: Fri, 10 Oct 2025 13:21:41 +0100 Subject: [PATCH 1/2] add TCP keepalive support --- Release/include/cpprest/http_listener.h | 25 +++++++++++++++++++ .../src/http/listener/http_server_asio.cpp | 7 ++++++ 2 files changed, 32 insertions(+) diff --git a/Release/include/cpprest/http_listener.h b/Release/include/cpprest/http_listener.h index a5457c0135..9bd771bdba 100644 --- a/Release/include/cpprest/http_listener.h +++ b/Release/include/cpprest/http_listener.h @@ -18,6 +18,7 @@ #include #if !defined(_WIN32) && !defined(__cplusplus_winrt) || defined(CPPREST_FORCE_HTTP_LISTENER_ASIO) #include +#include #endif #if !defined(_WIN32) || (_WIN32_WINNT >= _WIN32_WINNT_VISTA && !defined(__cplusplus_winrt)) || \ @@ -53,6 +54,7 @@ class http_listener_config , m_backlog(other.m_backlog) #if !defined(_WIN32) || defined(CPPREST_FORCE_HTTP_LISTENER_ASIO) , m_ssl_context_callback(other.m_ssl_context_callback) + , m_tcp_socket_callback(other.m_tcp_socket_callback) #endif { } @@ -66,6 +68,7 @@ class http_listener_config , m_backlog(std::move(other.m_backlog)) #if !defined(_WIN32) || defined(CPPREST_FORCE_HTTP_LISTENER_ASIO) , m_ssl_context_callback(std::move(other.m_ssl_context_callback)) + , m_tcp_socket_callback(std::move(other.m_tcp_socket_callback)) #endif { } @@ -82,6 +85,7 @@ class http_listener_config m_backlog = rhs.m_backlog; #if !defined(_WIN32) || defined(CPPREST_FORCE_HTTP_LISTENER_ASIO) m_ssl_context_callback = rhs.m_ssl_context_callback; + m_tcp_socket_callback = rhs.m_tcp_socket_callback; #endif } return *this; @@ -99,6 +103,7 @@ class http_listener_config m_backlog = std::move(rhs.m_backlog); #if !defined(_WIN32) || defined(CPPREST_FORCE_HTTP_LISTENER_ASIO) m_ssl_context_callback = std::move(rhs.m_ssl_context_callback); + m_tcp_socket_callback = std::move(rhs.m_tcp_socket_callback); #endif } return *this; @@ -149,6 +154,25 @@ class http_listener_config { m_ssl_context_callback = ssl_context_callback; } + + /// + /// Get the callback of tcp socket + /// + /// The function defined by the user of http_listener_config to configure a tcp socket. + const std::function& get_tcp_socket_callback() const + { + return m_tcp_socket_callback; + } + + /// + /// Set the callback of tcp socket + /// + /// The function to configure a tcp socket which will setup https + /// connections. + void set_tcp_socket_callback(const std::function& tcp_socket_callback) + { + m_tcp_socket_callback = tcp_socket_callback; + } #endif private: @@ -156,6 +180,7 @@ class http_listener_config int m_backlog; #if !defined(_WIN32) || defined(CPPREST_FORCE_HTTP_LISTENER_ASIO) std::function m_ssl_context_callback; + std::function m_tcp_socket_callback; #endif }; diff --git a/Release/src/http/listener/http_server_asio.cpp b/Release/src/http/listener/http_server_asio.cpp index e83b9ff525..ebe9b90081 100644 --- a/Release/src/http/listener/http_server_asio.cpp +++ b/Release/src/http/listener/http_server_asio.cpp @@ -135,6 +135,7 @@ class hostport_listener bool m_is_https; const std::function& m_ssl_context_callback; + const std::function& m_tcp_socket_callback; public: hostport_listener(http_linux_server* server, @@ -150,6 +151,7 @@ class hostport_listener , m_p_server(server) , m_is_https(is_https) , m_ssl_context_callback(config.get_ssl_context_callback()) + , m_tcp_socket_callback(config.get_tcp_socket_callback()) { m_all_connections_complete.set(); @@ -597,6 +599,11 @@ void hostport_listener::on_accept(std::unique_ptr socket, const boost::system::error_code error_ignored; socket->set_option(option, error_ignored); + if (m_tcp_socket_callback) + { + m_tcp_socket_callback(*socket); + } + auto conn = asio_server_connection::create(std::move(socket), m_p_server, this); m_connections.insert(conn.get()); From 53505652100389556077c3f8e537df67666a68ab Mon Sep 17 00:00:00 2001 From: lo-simon Date: Wed, 29 Oct 2025 09:26:50 +0000 Subject: [PATCH 2/2] Update contributors list --- CONTRIBUTORS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index 36348fa544..131fb5f56b 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -57,3 +57,4 @@ René Meusel (reneme) Sony Corporation Gareth Sylvester-Bradley (garethsb-sony) +Simon Lo (lo-simon)