uvco 0.1
Loading...
Searching...
No Matches
uvco::TcpClient::ConnectAwaiter_ Struct Reference

Public Member Functions

 ConnectAwaiter_ ()
 ~ConnectAwaiter_ ()
bool await_ready () const
bool await_suspend (std::coroutine_handle<> handle)
TcpStream await_resume ()
void onConnect (uv_status status)

Public Attributes

std::unique_ptr< uv_connect_t > req_
std::unique_ptr< uv_tcp_t > socket_
std::coroutine_handle handle_
std::optional< uv_statusstatus_

Constructor & Destructor Documentation

◆ ConnectAwaiter_()

uvco::TcpClient::ConnectAwaiter_::ConnectAwaiter_ ( )
45 : req_{std::make_unique<uv_connect_t>()},
46 socket_{std::make_unique<uv_tcp_t>()} {
47 setRequestData(req_.get(), this);
48}
void setRequestData(Request *req, Data *data)
Set data pointer on request.
Definition internal_utils.h:90
std::unique_ptr< uv_connect_t > req_
Definition tcp.cc:38
std::unique_ptr< uv_tcp_t > socket_
Definition tcp.cc:39

◆ ~ConnectAwaiter_()

uvco::TcpClient::ConnectAwaiter_::~ConnectAwaiter_ ( )
63 {
64 if (!requestDataIsNull(req_.get())) {
66 uv_cancel((uv_req_t *)req_.release());
67 }
68 if (socket_ != nullptr) {
69 closeHandle(socket_.release(), uvCloseReset);
70 }
71}
void closeHandle(Handle *handle, void(*closer)(CloserArg *, void(*)(uv_handle_t *)))
Definition close.h:37
void resetRequestData(Request *req)
Definition internal_utils.h:95
bool requestDataIsNull(Request *req)
Check if request data is null.
Definition internal_utils.h:107

Member Function Documentation

◆ await_ready()

bool uvco::TcpClient::ConnectAwaiter_::await_ready ( ) const
nodiscard
73 {
74 return status_.has_value();
75}
std::optional< uv_status > status_
Definition tcp.cc:41

◆ await_resume()

TcpStream uvco::TcpClient::ConnectAwaiter_::await_resume ( )
83 {
85 BOOST_ASSERT(status_);
86 if (status_.value() != 0) {
87 throw UvcoException{status_.value(),
88 "TcpClient::connect() connection failed"};
89 }
90 return TcpStream{std::move(socket_)};
91}

◆ await_suspend()

bool uvco::TcpClient::ConnectAwaiter_::await_suspend ( std::coroutine_handle<> handle)
77 {
78 BOOST_ASSERT(!handle_);
79 handle_ = handle;
80 return true;
81}
std::coroutine_handle handle_
Definition tcp.cc:40

◆ onConnect()

void uvco::TcpClient::ConnectAwaiter_::onConnect ( uv_status status)
93 {
94 status_ = status;
95 if (handle_ != nullptr) {
97 handle_ = nullptr;
98 }
99}
static void enqueue(std::coroutine_handle<> handle)
Definition loop.cc:94

Member Data Documentation

◆ handle_

std::coroutine_handle uvco::TcpClient::ConnectAwaiter_::handle_

◆ req_

std::unique_ptr<uv_connect_t> uvco::TcpClient::ConnectAwaiter_::req_

◆ socket_

std::unique_ptr<uv_tcp_t> uvco::TcpClient::ConnectAwaiter_::socket_

◆ status_

std::optional<uv_status> uvco::TcpClient::ConnectAwaiter_::status_

The documentation for this struct was generated from the following file: