// // Copyright © 2020 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #pragma once #include "BasePipeServer.hpp" #include namespace armnnProfiling { class ConnectionHandler { public: /// Constructor establishes the Unix domain socket and sets it to listen for connections. /// @param udsNamespace the namespace (socket address) associated with the listener. /// @throws SocketConnectionException if the socket has been incorrectly setup. ConnectionHandler(const std::string& udsNamespace, const bool setNonBlocking); ~ConnectionHandler() { // We have set SOCK_CLOEXEC on this socket but we'll close it to be good citizens. armnnUtils::Sockets::Close(m_ListeningSocket); } ConnectionHandler(const ConnectionHandler&) = delete; ConnectionHandler& operator=(const ConnectionHandler&) = delete; ConnectionHandler(ConnectionHandler&&) = delete; ConnectionHandler& operator=(ConnectionHandler&&) = delete; /// Attempt to open a new socket to the client and use it to construct a new basePipeServer /// @param echoPackets if true the raw packets will be printed to stdout. /// @return if successful a unique_ptr to a basePipeServer otherwise a nullptr std::unique_ptr GetNewBasePipeServer(const bool echoPackets); private: armnnUtils::Sockets::Socket m_ListeningSocket; }; } // namespace armnnProfiling