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.

86 {
87 ConnectAwaiter_ awaiter{loop_};
88 const OnExit onExit{[&awaiter, req = awaiter.req_.get()] {
89 if (awaiter.handle_ != nullptr) {
91 }
92 }};
93
94#if UV_VERSION_MAJOR == 1 && UV_VERSION_MINOR >= 46
95 const uv_status connectStatus =
96 uv_pipe_connect2(awaiter.req_.release(), awaiter.pipe_.get(),
97 path.data(), path.size(), 0, ConnectAwaiter_::onConnect);
98 if (connectStatus != 0) {
99 closeHandle(awaiter.pipe_.release());
100 throw UvcoException(connectStatus,
101 "UnixStreamClient::connect() failed immediately");
102 }
103#else
104 uv_pipe_connect(connect.request_.release(), connect.pipe_.get(), path.data(),
106#endif
107
108 std::optional<UvcoException> maybeError;
109 // Special error handling mechanism to properly close the
110 // open but not connected handle.
111 try {
112 co_return (co_await awaiter);
113 } catch (const UvcoException &e) {
114 maybeError = e;
115 }
116 closeHandle(awaiter.pipe_.release());
117 BOOST_ASSERT(maybeError);
118 throw std::move(maybeError.value());
119}
Promise< UnixStream > connect(std::string_view path)
Connect to a Unix domain socket at the given path.
Definition uds.cc:86
void closeHandle(Handle *handle, void(*closer)(CloserArg *, void(*)(uv_handle_t *)))
Definition close.h:37
void resetRequestData(Request *req)
Definition internal_utils.h:95
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:121

◆ 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: