5 #ifndef BITCOIN_UTIL_SOCK_H
6 #define BITCOIN_UTIL_SOCK_H
91 virtual ssize_t
Send(
const void *data,
size_t len,
int flags)
const;
98 virtual ssize_t
Recv(
void *buf,
size_t len,
int flags)
const;
105 virtual int Connect(
const sockaddr *addr, socklen_t addr_len)
const;
113 virtual int GetSockOpt(
int level,
int opt_name,
void *opt_val,
114 socklen_t *opt_len)
const;
142 virtual bool Wait(std::chrono::milliseconds timeout,
Event requested,
143 Event *occurred =
nullptr)
const;
156 std::chrono::milliseconds timeout,
173 std::chrono::milliseconds timeout,
175 size_t max_data)
const;
182 virtual bool IsConnected(std::string &errmsg)
const;
A helper class for interruptible sleeps.
RAII helper class that manages a socket.
virtual ssize_t Send(const void *data, size_t len, int flags) const
send(2) wrapper.
static constexpr Event SEND
If passed to Wait(), then it will wait for readiness to send to the socket.
SOCKET m_socket
Contained socket.
virtual void SendComplete(const std::string &data, std::chrono::milliseconds timeout, CThreadInterrupt &interrupt) const
Send the given data, retrying on transient errors.
virtual bool Wait(std::chrono::milliseconds timeout, Event requested, Event *occurred=nullptr) const
Wait for readiness for input (recv) or output (send).
virtual ~Sock()
Destructor, close the socket or do nothing if empty.
Sock(const Sock &)=delete
Copy constructor, disabled because closing the same socket twice is undesirable.
Sock()
Default constructor, creates an empty object that does nothing when destroyed.
virtual SOCKET Release()
Get the value of the contained socket and drop ownership.
virtual bool IsConnected(std::string &errmsg) const
Check if still connected.
static constexpr Event RECV
If passed to Wait(), then it will wait for readiness to read from the socket.
virtual SOCKET Get() const
Get the value of the contained socket.
virtual int GetSockOpt(int level, int opt_name, void *opt_val, socklen_t *opt_len) const
getsockopt(2) wrapper.
virtual int Connect(const sockaddr *addr, socklen_t addr_len) const
connect(2) wrapper.
Sock & operator=(const Sock &)=delete
Copy assignment operator, disabled because closing the same socket twice is undesirable.
virtual void Reset()
Close if non-empty.
virtual ssize_t Recv(void *buf, size_t len, int flags) const
recv(2) wrapper.
virtual std::string RecvUntilTerminator(uint8_t terminator, std::chrono::milliseconds timeout, CThreadInterrupt &interrupt, size_t max_data) const
Read from socket until a terminator character is encountered.
static constexpr auto MAX_WAIT_FOR_IO
Maximum time to wait for I/O readiness.
std::string NetworkErrorString(int err)
Return readable error string for a network error code.
bool CloseSocket(SOCKET &hSocket)
Close socket and set hSocket to INVALID_SOCKET.