uvco 0.1
Loading...
Searching...
No Matches
uvco::UnixStreamClient Class Reference

#include <uds.h>

Collaboration diagram for uvco::UnixStreamClient:

Classes

struct  ConnectAwaiter_

Public Member Functions

 UnixStreamClient (const UnixStreamClient &)=delete
 UnixStreamClient (UnixStreamClient &&)=delete
UnixStreamClientoperator= (const UnixStreamClient &)=delete
UnixStreamClientoperator= (UnixStreamClient &&)=delete
 ~UnixStreamClient ()=default
 UnixStreamClient (const Loop &loop)
Promise< UnixStreamconnect (std::string_view path)
 Connect to a Unix domain socket at the given path.

Private Attributes

const Looploop_

Detailed Description

A client that connects to a Unix domain socket (type SOCK_STREAM).

The connect() method returns a Promise<UnixStream>, which will resolve when the connection is established. The peer address can be obtained using the getPeerName() method on UnixStream.

Constructor & Destructor Documentation

◆ UnixStreamClient() [1/3]

uvco::UnixStreamClient::UnixStreamClient ( const UnixStreamClient & )
delete

◆ UnixStreamClient() [2/3]

uvco::UnixStreamClient::UnixStreamClient ( UnixStreamClient && )
delete

◆ ~UnixStreamClient()

uvco::UnixStreamClient::~UnixStreamClient ( )
default

◆ UnixStreamClient() [3/3]

uvco::UnixStreamClient::UnixStreamClient ( const Loop & loop)
inlineexplicit
35: loop_{loop} {}
const Loop & loop_
Definition uds.h:41

Member Function Documentation

◆ connect()

Promise< UnixStream > uvco::UnixStreamClient::connect ( std::string_view path)

Connect to a Unix domain socket at the given path.

82 {
84
85#if UV_VERSION_MAJOR == 1 && UV_VERSION_MINOR >= 46
86 const uv_status connectStatus =
87 uv_pipe_connect2(connect.request_.get(), connect.pipe_.get(), path.data(),
88 path.size(), 0, ConnectAwaiter_::onConnect);
89 if (connectStatus != 0) {
90 closeHandle(connect.pipe_.release());
91 throw UvcoException(connectStatus,
92 "UnixStreamClient::connect() failed immediately");
93 }
94#else
95 uv_pipe_connect(&request_, pipe_.get(), path_.data(), onConnect);
96#endif
97
98 std::optional<UvcoException> maybeError;
99 // Special error handling mechanism to properly close the
100 // open but not connected handle.
101 try {
102 co_return (co_await connect);
103 } catch (const UvcoException &e) {
104 maybeError = e;
105 }
106 closeHandle(connect.pipe_.release());
107 BOOST_ASSERT(maybeError);
108 throw std::move(maybeError.value());
109}
Promise< UnixStream > connect(std::string_view path)
Connect to a Unix domain socket at the given path.
Definition uds.cc:82
void closeHandle(Handle *handle, void(*closer)(CloserArg *, void(*)(uv_handle_t *)))
Definition close.h:37
int uv_status
Result of a libuv operation, an errno error code.
Definition internal_utils.h:22
static void onConnect(uv_connect_t *req, uv_status status)
Definition uds.cc:111

◆ operator=() [1/2]

UnixStreamClient & uvco::UnixStreamClient::operator= ( const UnixStreamClient & )
delete

◆ operator=() [2/2]

UnixStreamClient & uvco::UnixStreamClient::operator= ( UnixStreamClient && )
delete

Member Data Documentation

◆ loop_

const Loop& uvco::UnixStreamClient::loop_
private

The documentation for this class was generated from the following files: