17#ifndef CUTTLEFISH_COMMON_COMMON_LIBS_FS_SHARED_FD_H_
18#define CUTTLEFISH_COMMON_COMMON_LIBS_FS_SHARED_FD_H_
24#include <sys/inotify.h>
27#include <sys/select.h>
28#include <sys/socket.h>
39#include <linux/vm_sockets.h>
41#include <sys/eventfd.h>
78struct VhostUserVsockCid;
140 static SharedFD Open(
const char* pathname,
int flags, mode_t mode = 0);
141 static SharedFD Open(
const std::string& pathname,
int flags, mode_t mode = 0);
145 static SharedFD ShmOpen(
const std::string&
name,
int oflag,
int mode);
148 const std::string&
data,
149 unsigned int flags = 0);
151 std::string_view path,
int flags = O_CLOEXEC);
153 static int Poll(std::vector<PollSharedFd>& fds,
int timeout);
158 static SharedFD Socket(
int domain,
int socket_type,
int protocol);
162 int in_type,
int timeout_seconds);
165 const std::string& host,
int port,
int type,
166 std::chrono::seconds timeout = std::chrono::seconds(0));
168 const std::string& host,
const std::string& interface,
int port,
int type,
169 std::chrono::seconds timeout = std::chrono::seconds(0));
171 int in_type, mode_t mode);
189 static SharedFD VsockServer(
unsigned int port,
int type,
190 std::optional<int> vhost_user_vsock_listening_cid,
191 unsigned int cid = VMADDR_CID_ANY);
193 int type, std::optional<int> vhost_user_vsock_listening_cid);
194 static SharedFD VsockClient(
unsigned int cid,
unsigned int port,
int type,
196 static std::string GetVhostUserVsockServerAddr(
197 unsigned int port,
int vhost_user_vsock_listening_cid);
198 static std::string GetVhostUserVsockClientAddr(
int cid);
Definition: shared_fd.h:124
std::shared_ptr< Fd > operator->() const
Definition: shared_fd.h:203
SharedFD & operator=(SharedFD const &)=default
static SharedFD ErrorFD(int error)
Definition: shared_fd.cpp:229
static SharedFD Open(const char *pathname, int flags, mode_t mode=0)
Definition: shared_fd.cpp:214
Fd & operator*()
Definition: shared_fd.h:207
auto operator<=>(const SharedFD &) const =default
static SharedFD Socket(int domain, int socket_type, int protocol)
Definition: shared_fd.cpp:218
SharedFD()
Definition: shared_fd.cpp:105
static Result< std::pair< SharedFD, std::string > > Mkostemp(std::string_view path, int flags=O_CLOEXEC)
Definition: shared_fd.cpp:222
static SharedFD MemfdCreateWithData(const std::string &name, const std::string &data, unsigned int flags=0)
Definition: shared_fd.cpp:174
SharedFD(const std::shared_ptr< Fd > &in)
Definition: shared_fd.h:130
static SharedFD Dup(int unmanaged_fd)
Definition: shared_fd.cpp:145
static int Poll(PollSharedFd *fds, size_t num_fds, int timeout)
Definition: shared_fd.cpp:131
static bool Pipe(SharedFD *fd0, SharedFD *fd1)
Definition: shared_fd.cpp:149
static bool SocketPair(int domain, int type, int protocol, SharedFD *fd0, SharedFD *fd1)
Definition: shared_fd.cpp:190
static SharedFD SocketLocalClient(const std::string &name, bool is_abstract, int in_type)
Definition: shared_fd.cpp:231
std::shared_ptr< Fd > value_
Definition: shared_fd.h:212
static SharedFD SocketClient(const std::string &host, int port, int type, std::chrono::seconds timeout=std::chrono::seconds(0))
Definition: shared_fd.cpp:246
const Fd & operator*() const
Definition: shared_fd.h:205
static SharedFD Socket6Client(const std::string &host, const std::string &interface, int port, int type, std::chrono::seconds timeout=std::chrono::seconds(0))
Definition: shared_fd.cpp:251
static SharedFD SocketLocalServer(const std::string &name, bool is_abstract, int in_type, mode_t mode)
Definition: shared_fd.cpp:261
SharedFD(SharedFD const &)=default
Definition: shared_fd.h:220
std::weak_ptr< Fd > value_
Definition: shared_fd.h:229
WeakFD(SharedFD shared_fd)
Definition: shared_fd.h:222
SharedFD lock() const
Definition: shared_fd.cpp:328
#define data
Definition: dict.c:56
#define error(format, args...)
Definition: fec_private.h:201
char * name
Definition: libf2fs.c:1403
Event
Definition: kernel_log_server.h:31
Definition: alloc_driver.h:20
tl::expected< T, StackTraceError > Result
Definition: result_type.h:30
uint8_t type
Definition: pairing_connection.h:0
Definition: shared_fd.h:232
short revents
Definition: shared_fd.h:235
short events
Definition: shared_fd.h:234
SharedFD fd
Definition: shared_fd.h:233