uvco 0.1
Loading...
Searching...
No Matches
uds.h
Go to the documentation of this file.
1// uvco (c) 2024 Lewin Bormann. See LICENSE for specific terms.
2
3#pragma once
4
5#include <fmt/core.h>
6#include <uv.h>
7
10#include "uvco/run.h"
12#include "uvco/uds_stream.h"
13
14#include <coroutine>
15#include <memory>
16#include <optional>
17#include <string_view>
18
19namespace uvco {
20
23
30public:
35 ~UnixStreamClient() = default;
36
37 explicit UnixStreamClient(const Loop &loop) : loop_{loop} {}
38
40 Promise<UnixStream> connect(std::string_view path);
41
42private:
43 const Loop &loop_;
44
52 explicit ConnectAwaiter_(const Loop &loop, std::string_view path);
53
54 static void onConnect(uv_connect_t *req, uv_status status);
55
56 [[nodiscard]] static bool await_ready();
57 bool await_suspend(std::coroutine_handle<> handle);
59
60 uv_connect_t request_{};
61 std::unique_ptr<uv_pipe_t> pipe_;
62 std::string_view path_;
63 std::optional<std::coroutine_handle<>> handle_;
64 std::optional<uv_status> status_;
65 };
66};
67
75class UnixStreamServer : public StreamServerBase<uv_pipe_t, UnixStream> {
76public:
81 ~UnixStreamServer() = default;
82
87 UnixStreamServer(const Loop &loop, std::string_view bindPath, int flags = 0);
88
91 void chmod(int mode);
92};
93
95
96} // namespace uvco
Definition loop.h:26
Definition promise.h:76
Definition stream_server_base.h:38
Definition uds.h:29
UnixStreamClient & operator=(const UnixStreamClient &)=delete
const Loop & loop_
Definition uds.h:43
UnixStreamClient(const UnixStreamClient &)=delete
UnixStreamClient & operator=(UnixStreamClient &&)=delete
UnixStreamClient(UnixStreamClient &&)=delete
UnixStreamClient(const Loop &loop)
Definition uds.h:37
Promise< UnixStream > connect(std::string_view path)
Connect to a Unix domain socket at the given path.
Definition uds.cc:42
Definition uds.h:75
UnixStreamServer(const UnixStreamServer &)=delete
UnixStreamServer(UnixStreamServer &&)=default
UnixStreamServer & operator=(const UnixStreamServer &)=delete
UnixStreamServer & operator=(UnixStreamServer &&)=default
void chmod(int mode)
Definition uds.cc:40
Definition uds_stream.h:22
int uv_status
Result of a libuv operation, an errno error code.
Definition internal_utils.h:22
Definition async_work.cc:17
UnixStream await_resume()
Definition uds.cc:98
static bool await_ready()
Definition uds.cc:74
std::optional< uv_status > status_
Definition uds.h:64
std::unique_ptr< uv_pipe_t > pipe_
Definition uds.h:61
uv_connect_t request_
Definition uds.h:60
std::string_view path_
Definition uds.h:62
bool await_suspend(std::coroutine_handle<> handle)
Definition uds.cc:76
std::optional< std::coroutine_handle<> > handle_
Definition uds.h:63
ConnectAwaiter_(const Loop &loop, std::string_view path)
Definition uds.cc:58
static void onConnect(uv_connect_t *req, uv_status status)
Definition uds.cc:64