net/loolnb.cpp | 12 +++++++----- net/socket.hpp | 6 ++++-- 2 files changed, 11 insertions(+), 7 deletions(-)
New commits: commit d15a3d3945ee8fbab0381644de1be5857ca6f9c0 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Fri Feb 17 18:17:16 2017 -0500 nb: server can create any socket type on accept Change-Id: I1a786421628500844277e6a2f1d2fd7b0ac0c3e4 Reviewed-on: https://gerrit.libreoffice.org/34392 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/net/loolnb.cpp b/net/loolnb.cpp index d819a1c..9fb6dc0 100644 --- a/net/loolnb.cpp +++ b/net/loolnb.cpp @@ -280,6 +280,8 @@ Poco::Net::SocketAddress addrHttp("127.0.0.1", HttpPortNumber); Poco::Net::SocketAddress addrSsl("127.0.0.1", SslPortNumber); /// A non-blocking, streaming socket. +/// T is the socket type created by accept. +template <class T> class ServerSocket : public Socket { SocketPoll& _clientPoller; @@ -317,8 +319,7 @@ public: /// Accepts an incoming connection (Servers only). /// Does not retry on error. /// Returns a valid Socket shared_ptr on success only. - template <typename T> - std::shared_ptr<T> accept() + std::shared_ptr<Socket> accept() { // Accept a connection (if any) and set it to non-blocking. // We don't care about the client's address, so ignored. @@ -333,7 +334,7 @@ public: HandleResult handlePoll( int /* events */ ) override { - std::shared_ptr<SimpleResponseClient> clientSocket = accept<SimpleResponseClient>(); + std::shared_ptr<Socket> clientSocket = accept(); if (!clientSocket) { const std::string msg = "Failed to accept. (errno: "; @@ -347,10 +348,11 @@ public: } }; +template <typename T> void server(const Poco::Net::SocketAddress& addr, SocketPoll& clientPoller) { // Start server. - auto server = std::make_shared<ServerSocket>(clientPoller); + auto server = std::make_shared<ServerSocket<T>>(clientPoller); if (!server->bind(addr)) { const std::string msg = "Failed to bind. (errno: "; @@ -394,7 +396,7 @@ int main(int, const char**) }); // Start the server. - server(addrHttp, poller); + server<SimpleResponseClient>(addrHttp, poller); std::cout << "Shutting down server." << std::endl; diff --git a/net/socket.hpp b/net/socket.hpp index 8982380..fae37a2 100644 --- a/net/socket.hpp +++ b/net/socket.hpp @@ -383,7 +383,8 @@ protected: { } - friend class ServerSocket; + // Will construct us upon accept. + template<class T> friend class ServerSocket; }; /// A SSL/TSL, non-blocking, data streaming socket. @@ -432,7 +433,8 @@ protected: SSL_set_accept_state(_ssl); } - friend class ServerSocket; + // Will construct us upon accept. + template<class T> friend class ServerSocket; private: SSL* _ssl; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits