5#include <boost/assert.hpp>
47 unsigned int flag = 0);
52 bool ipv6only =
false);
58 std::optional<AddressHandle> address = {});
97 void joinMulticast(
const std::string &address,
const std::string &interface);
99 void leaveMulticast(
const std::string &address,
const std::string &interface);
105 [[nodiscard]] std::optional<AddressHandle>
getPeername()
const;
115 std::unique_ptr<uv_udp_t>
udp_;
123 static void onReceiveOne(uv_udp_t *handle, ssize_t nread,
const uv_buf_t *buf,
124 const struct sockaddr *addr,
unsigned int flags);
129 std::variant<std::pair<std::string, AddressHandle>,
uv_status>;
134 std::optional<std::pair<std::string, AddressHandle>>
await_resume();
137 std::optional<std::coroutine_handle<>>
handle_;
148 std::optional<std::coroutine_handle<>>
handle_;
AddressHandle is a light-weight wrapper around a struct sockaddr_in(6), and is therefore cheap to cop...
Definition name_resolution.h:38
Definition bounded_queue.h:23
Definition multipromise.h:133
AddressHandle getSockname() const
Obtain locally bound name of socket.
Definition udp.cc:328
const Loop * loop_
Definition udp.h:114
~Udp()
Definition udp.cc:38
Promise< void > bind(std::string_view address, uint16_t port, unsigned int flag=0)
Bind UDP socket to address.
Promise< std::pair< std::string, AddressHandle > > receiveOneFrom()
Definition udp.cc:138
MultiPromise< std::pair< std::string, AddressHandle > > receiveMany()
Definition udp.cc:157
int udpStartReceive()
Definition udp.cc:231
void setMulticastLoop(bool enabled)
Definition udp.cc:302
bool connected_
Definition udp.h:116
static void onReceiveOne(uv_udp_t *handle, ssize_t nread, const uv_buf_t *buf, const struct sockaddr *addr, unsigned int flags)
Definition udp.cc:236
Udp(const Loop &loop)
Set up a UDP object.
Definition udp.cc:34
Promise< void > send(std::span< char > buffer, std::optional< AddressHandle > address={})
Definition udp.cc:98
void stopReceiveMany(MultiPromise< std::pair< std::string, AddressHandle > > &packets)
Definition udp.cc:206
void joinMulticast(const std::string &address, const std::string &interface)
Join a multicast group.
Definition udp.cc:310
Promise< std::string > receiveOne()
Definition udp.cc:133
void setMulticastInterface(const std::string &interfaceAddress)
Set multicast interface for sending or receiving data.
Definition udp.cc:294
bool is_receiving_
Definition udp.h:118
Udp & operator=(Udp &&other)=default
void leaveMulticast(const std::string &address, const std::string &interface)
Leave multicast group.
Definition udp.cc:319
void setBroadcast(bool enabled)
Enable sending to broadcast addresses.
Definition udp.cc:279
void setTtl(uint8_t ttl)
Set TTL on sent packets. TTL must be between 1 and 255.
Definition udp.cc:287
uv_udp_t * underlying() const
Definition udp.cc:355
Promise< void > close()
Definition udp.cc:188
static void onSendDone(uv_udp_send_t *req, uv_status status)
Definition udp.cc:381
Udp & operator=(const Udp &)=delete
std::unique_ptr< uv_udp_t > udp_
Definition udp.h:115
Promise< void > connect(std::string_view address, uint16_t port, bool ipv6only=false)
Connect UDP socket to address.
Definition udp.cc:73
void udpStopReceive()
Definition udp.cc:226
std::optional< AddressHandle > getPeername() const
Obtain peer name if connected.
Definition udp.cc:340
int uv_status
Result of a libuv operation, an errno error code.
Definition internal_utils.h:22
Definition async_work.cc:17
bool stop_receiving_
Definition udp.h:138
RecvAwaiter_()
Definition udp.cc:357
std::optional< std::pair< std::string, AddressHandle > > await_resume()
Definition udp.cc:368
std::variant< std::pair< std::string, AddressHandle >, uv_status > QueueItem_
Definition udp.h:128
bool await_ready() const
Definition udp.cc:365
bool await_suspend(std::coroutine_handle<> handle)
Definition udp.cc:359
std::optional< std::coroutine_handle<> > handle_
Definition udp.h:137
static constexpr unsigned packetQueueSize
Definition udp.h:127
BoundedQueue< QueueItem_ > buffer_
Definition udp.h:136
int await_resume()
Definition udp.cc:399
std::optional< std::coroutine_handle<> > handle_
Definition udp.h:148
std::optional< int > status_
Definition udp.h:149
bool await_ready() const
Definition udp.cc:391
bool await_suspend(std::coroutine_handle<> h)
Definition udp.cc:393