blob: 661935b8857e42735e573acbea5469e4e714fdbe [file] [log] [blame]
Finn Williams2ed809c2020-04-20 21:21:07 +01001//
2// Copyright © 2020 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
Finn Williams2ed809c2020-04-20 21:21:07 +01008#include "BasePipeServer.hpp"
9#include <string>
10
11namespace armnnProfiling
12{
13
14class ConnectionHandler
15{
16public:
17 /// Constructor establishes the Unix domain socket and sets it to listen for connections.
18 /// @param udsNamespace the namespace (socket address) associated with the listener.
19 /// @throws SocketConnectionException if the socket has been incorrectly setup.
20 ConnectionHandler(const std::string& udsNamespace, const bool setNonBlocking);
21
22 ~ConnectionHandler()
23 {
24 // We have set SOCK_CLOEXEC on this socket but we'll close it to be good citizens.
25 armnnUtils::Sockets::Close(m_ListeningSocket);
26 }
27
28 ConnectionHandler(const ConnectionHandler&) = delete;
29 ConnectionHandler& operator=(const ConnectionHandler&) = delete;
30
31 ConnectionHandler(ConnectionHandler&&) = delete;
32 ConnectionHandler& operator=(ConnectionHandler&&) = delete;
33
34 /// Attempt to open a new socket to the client and use it to construct a new basePipeServer
35 /// @param echoPackets if true the raw packets will be printed to stdout.
36 /// @return if successful a unique_ptr to a basePipeServer otherwise a nullptr
37 std::unique_ptr<BasePipeServer> GetNewBasePipeServer(const bool echoPackets);
38
39private:
40
41 armnnUtils::Sockets::Socket m_ListeningSocket;
42};
43
44} // namespace armnnProfiling