43 unsigned int flag = 0);
48 bool ipv6only =
false);
54 std::optional<AddressHandle> address = {});
93 void joinMulticast(
const std::string &address,
const std::string &interface);
95 void leaveMulticast(
const std::string &address,
const std::string &interface);
101 [[nodiscard]] std::optional<AddressHandle>
getPeername()
const;
110 std::unique_ptr<uv_udp_t>
udp_;
117 static void onReceiveOne(uv_udp_t *handle, ssize_t nread,
const uv_buf_t *buf,
118 const struct sockaddr *addr,
unsigned int flags);
AddressHandle is a light-weight wrapper around a struct / sockaddr_in(6), and is therefore cheap to c...
Definition name_resolution.h:32
Definition multipromise.h:127
AddressHandle getSockname() const
Obtain locally bound name of socket.
Definition udp.cc:352
const Loop * loop_
Definition udp.h:109
~Udp()
Definition udp.cc:78
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:169
MultiPromise< std::pair< std::string, AddressHandle > > receiveMany()
Definition udp.cc:189
int udpStartReceive()
Definition udp.cc:251
void setMulticastLoop(bool enabled)
Definition udp.cc:326
bool connected_
Definition udp.h:111
void close()
Definition udp.cc:218
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:256
Udp(const Loop &loop)
Set up a UDP object.
Definition udp.cc:74
void stopReceiveMany(MultiPromise< std::pair< std::string, AddressHandle > > &packets)
Definition udp.cc:239
void joinMulticast(const std::string &address, const std::string &interface)
Join a multicast group.
Definition udp.cc:334
Promise< std::string > receiveOne()
Definition udp.cc:163
void setMulticastInterface(const std::string &interfaceAddress)
Set multicast interface for sending or receiving data.
Definition udp.cc:318
Udp & operator=(Udp &&other)=default
void leaveMulticast(const std::string &address, const std::string &interface)
Leave multicast group.
Definition udp.cc:343
void setBroadcast(bool enabled)
Enable sending to broadcast addresses.
Definition udp.cc:303
void setTtl(uint8_t ttl)
Set TTL on sent packets. TTL must be between 1 and 255.
Definition udp.cc:311
static void onSendDone(uv_udp_send_t *req, uv_status status)
Definition udp.cc:407
Promise< void > send(std::span< const char > buffer, std::optional< AddressHandle > address={})
Definition udp.cc:134
Udp & operator=(const Udp &)=delete
std::unique_ptr< uv_udp_t > udp_
Definition udp.h:110
Promise< void > connect(std::string_view address, uint16_t port, bool ipv6only=false)
Connect UDP socket to address.
Definition udp.cc:107
void udpStopReceive()
Definition udp.cc:246
std::optional< AddressHandle > getPeername() const
Obtain peer name if connected.
Definition udp.cc:364
int uv_status
Result of a libuv operation, an errno error code.
Definition internal_utils.h:22
Definition async_work.cc:18