Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:42:48

0001 //===-- ConnectionFileDescriptorPosix.h -------------------------*- C++ -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 
0009 #ifndef LLDB_HOST_POSIX_CONNECTIONFILEDESCRIPTORPOSIX_H
0010 #define LLDB_HOST_POSIX_CONNECTIONFILEDESCRIPTORPOSIX_H
0011 
0012 #include <atomic>
0013 #include <memory>
0014 #include <mutex>
0015 
0016 #include "lldb/lldb-forward.h"
0017 
0018 #include "lldb/Host/Pipe.h"
0019 #include "lldb/Host/Socket.h"
0020 #include "lldb/Utility/Connection.h"
0021 #include "lldb/Utility/IOObject.h"
0022 
0023 namespace lldb_private {
0024 
0025 class Status;
0026 class Socket;
0027 class SocketAddress;
0028 
0029 class ConnectionFileDescriptor : public Connection {
0030 public:
0031   typedef llvm::function_ref<void(llvm::StringRef local_socket_id)>
0032       socket_id_callback_type;
0033 
0034   ConnectionFileDescriptor();
0035 
0036   ConnectionFileDescriptor(int fd, bool owns_fd);
0037 
0038   ConnectionFileDescriptor(Socket *socket);
0039 
0040   ~ConnectionFileDescriptor() override;
0041 
0042   bool IsConnected() const override;
0043 
0044   lldb::ConnectionStatus Connect(llvm::StringRef url,
0045                                  Status *error_ptr) override;
0046 
0047   lldb::ConnectionStatus Connect(llvm::StringRef url,
0048                                  socket_id_callback_type socket_id_callback,
0049                                  Status *error_ptr);
0050 
0051   lldb::ConnectionStatus Disconnect(Status *error_ptr) override;
0052 
0053   size_t Read(void *dst, size_t dst_len, const Timeout<std::micro> &timeout,
0054               lldb::ConnectionStatus &status, Status *error_ptr) override;
0055 
0056   size_t Write(const void *src, size_t src_len, lldb::ConnectionStatus &status,
0057                Status *error_ptr) override;
0058 
0059   std::string GetURI() override;
0060 
0061   lldb::ConnectionStatus BytesAvailable(const Timeout<std::micro> &timeout,
0062                                         Status *error_ptr);
0063 
0064   bool InterruptRead() override;
0065 
0066   lldb::IOObjectSP GetReadObject() override { return m_io_sp; }
0067 
0068 protected:
0069   void OpenCommandPipe();
0070 
0071   void CloseCommandPipe();
0072 
0073   lldb::ConnectionStatus
0074   AcceptSocket(Socket::SocketProtocol socket_protocol,
0075                llvm::StringRef socket_name,
0076                llvm::function_ref<void(Socket &)> post_listen_callback,
0077                Status *error_ptr);
0078 
0079   lldb::ConnectionStatus ConnectSocket(Socket::SocketProtocol socket_protocol,
0080                                        llvm::StringRef socket_name,
0081                                        Status *error_ptr);
0082 
0083   lldb::ConnectionStatus AcceptTCP(llvm::StringRef host_and_port,
0084                                    socket_id_callback_type socket_id_callback,
0085                                    Status *error_ptr);
0086 
0087   lldb::ConnectionStatus ConnectTCP(llvm::StringRef host_and_port,
0088                                     socket_id_callback_type socket_id_callback,
0089                                     Status *error_ptr);
0090 
0091   lldb::ConnectionStatus ConnectUDP(llvm::StringRef args,
0092                                     socket_id_callback_type socket_id_callback,
0093                                     Status *error_ptr);
0094 
0095   lldb::ConnectionStatus
0096   ConnectNamedSocket(llvm::StringRef socket_name,
0097                      socket_id_callback_type socket_id_callback,
0098                      Status *error_ptr);
0099 
0100   lldb::ConnectionStatus
0101   AcceptNamedSocket(llvm::StringRef socket_name,
0102                     socket_id_callback_type socket_id_callback,
0103                     Status *error_ptr);
0104 
0105   lldb::ConnectionStatus
0106   AcceptAbstractSocket(llvm::StringRef socket_name,
0107                        socket_id_callback_type socket_id_callback,
0108                        Status *error_ptr);
0109 
0110   lldb::ConnectionStatus
0111   ConnectAbstractSocket(llvm::StringRef socket_name,
0112                         socket_id_callback_type socket_id_callback,
0113                         Status *error_ptr);
0114 
0115   lldb::ConnectionStatus ConnectFD(llvm::StringRef args,
0116                                    socket_id_callback_type socket_id_callback,
0117                                    Status *error_ptr);
0118 
0119   lldb::ConnectionStatus ConnectFile(llvm::StringRef args,
0120                                      socket_id_callback_type socket_id_callback,
0121                                      Status *error_ptr);
0122 
0123   lldb::ConnectionStatus
0124   ConnectSerialPort(llvm::StringRef args,
0125                     socket_id_callback_type socket_id_callback,
0126                     Status *error_ptr);
0127 
0128   lldb::IOObjectSP m_io_sp;
0129 
0130   Pipe m_pipe;
0131   std::recursive_mutex m_mutex;
0132   std::atomic<bool> m_shutting_down; // This marks that we are shutting down so
0133                                      // if we get woken up from
0134   // BytesAvailable to disconnect, we won't try to read again.
0135 
0136   std::string m_uri;
0137 
0138 private:
0139   void InitializeSocket(Socket *socket);
0140 
0141   ConnectionFileDescriptor(const ConnectionFileDescriptor &) = delete;
0142   const ConnectionFileDescriptor &
0143   operator=(const ConnectionFileDescriptor &) = delete;
0144 };
0145 
0146 } // namespace lldb_private
0147 
0148 #endif // LLDB_HOST_POSIX_CONNECTIONFILEDESCRIPTORPOSIX_H