1 //===-- Acceptor.h ----------------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 #ifndef LLDB_TOOLS_LLDB_SERVER_ACCEPTOR_H
9 #define LLDB_TOOLS_LLDB_SERVER_ACCEPTOR_H
10 
11 #include "lldb/Host/Socket.h"
12 #include "lldb/Utility/Connection.h"
13 #include "lldb/Utility/Status.h"
14 
15 #include <functional>
16 #include <memory>
17 #include <string>
18 
19 namespace llvm {
20 class StringRef;
21 }
22 
23 namespace lldb_private {
24 namespace lldb_server {
25 
26 class Acceptor {
27 public:
28   virtual ~Acceptor() = default;
29 
30   Status Listen(int backlog);
31 
32   Status Accept(const bool child_processes_inherit, Connection *&conn);
33 
34   static std::unique_ptr<Acceptor> Create(llvm::StringRef name,
35                                           const bool child_processes_inherit,
36                                           Status &error);
37 
38   Socket::SocketProtocol GetSocketProtocol() const;
39 
40   const char *GetSocketScheme() const;
41 
42   // Returns either TCP port number as string or domain socket path.
43   // Empty string is returned in case of error.
44   std::string GetLocalSocketId() const;
45 
46 private:
47   typedef std::function<std::string()> LocalSocketIdFunc;
48 
49   Acceptor(std::unique_ptr<Socket> &&listener_socket, llvm::StringRef name,
50            const LocalSocketIdFunc &local_socket_id);
51 
52   const std::unique_ptr<Socket> m_listener_socket_up;
53   const std::string m_name;
54   const LocalSocketIdFunc m_local_socket_id;
55 };
56 
57 } // namespace lldb_server
58 } // namespace lldb_private
59 
60 #endif // LLDB_TOOLS_LLDB_SERVER_ACCEPTOR_H
61