File indexing completed on 2026-05-10 08:42:48
0001
0002
0003
0004
0005
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;
0133
0134
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 }
0147
0148 #endif