116 {
117 AddressHandle address;
120 } else {
121 Resolver resolver{*
loop_};
123 }
124
126 const OnExit onExit{[&awaiter, req = awaiter.req_.get()] {
127 if (awaiter.handle_ != nullptr) {
129 }
130 }};
131
133 uv_tcp_init(
loop_->uvloop(), awaiter.socket_.get());
134 if (initStatus < 0) {
135 throw UvcoException(initStatus,
136 "TcpClient::connect() uv_tcp_init() failed");
137 }
138
139
141 uv_tcp_connect(awaiter.req_.release(), awaiter.socket_.get(),
143 if (connectStatus < 0) {
144
145 throw UvcoException(connectStatus,
146 "TcpClient::connect() failed immediately");
147 }
148
149 std::optional<UvcoException> maybeError;
150 try {
151 co_return (co_await awaiter);
152 } catch (const UvcoException &e) {
153 maybeError = e;
154 }
155
156 std::unique_ptr<uv_tcp_t> tcpSocket = std::move(awaiter.socket_);
158 BOOST_ASSERT(maybeError.has_value());
159 throw std::move(maybeError.value());
160}
static void onConnect(uv_connect_t *req, uv_status status)
Definition tcp.cc:162
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