idfxx 1.0.0
Modern C++23 components for ESP-IDF
Loading...
Searching...
No Matches
datagram_channel.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 Chris Leishman
3
4#pragma once
5
17#include "sdkconfig.h"
18
19#include <idfxx/net/endpoint>
20#include <idfxx/net/error>
21#include <idfxx/net/netconn/buffer>
23
24#include <cstddef>
25#include <cstdint>
26#include <span>
27
28namespace idfxx::net::netconn {
29
38enum class udp_variant : int {
39 standard,
40 lite,
42};
43
57class [[nodiscard]] datagram_channel : public detail::connectionless_channel {
58public:
59 // ----- construction -----
60
61#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
69#endif
70
77
78#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
88 explicit datagram_channel(address_family fam, udp_variant variant = udp_variant::standard);
89#endif
90
99
100 // ----- multicast -----
101
102#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
114 idfxx::unwrap(try_join_multicast_v4(group, interface));
115 }
116#endif
117
120
121#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
132 idfxx::unwrap(try_leave_multicast_v4(group, interface));
133 }
134#endif
135
138
139private:
141 : connectionless_channel(conn, fam) {}
142};
143
144} // namespace idfxx::net::netconn
145
// end of idfxx_net_netconn_datagram_channel
IPv4 address value type.
Definition net.hpp:41
static result< datagram_channel > make()
Creates a UDP netconn with default address family (IPv4) and standard UDP.
result< void > try_leave_multicast_v4(ipv4_addr group, ipv4_addr interface={})
Leaves an IPv4 multicast group.
void leave_multicast_v4(ipv4_addr group, ipv4_addr interface={})
Leaves an IPv4 multicast group.
datagram_channel(address_family fam, udp_variant variant=udp_variant::standard)
Creates a UDP netconn for the given address family.
datagram_channel()
Creates a UDP netconn with default address family (IPv4) and standard UDP.
void join_multicast_v4(ipv4_addr group, ipv4_addr interface={})
Joins an IPv4 multicast group.
result< void > try_join_multicast_v4(ipv4_addr group, ipv4_addr interface={})
Joins an IPv4 multicast group.
static result< datagram_channel > make(address_family fam, udp_variant variant=udp_variant::standard)
Creates a UDP netconn for the given address family.
udp_variant
UDP transport variant for datagram netconn channels.
@ no_checksum
UDP with checksums disabled.
@ lite
UDP-Lite (RFC 3828).
address_family
Address family.
Definition endpoint.hpp:37
T unwrap(result< T > result)
Throws a std::system_error if the result is an error.
Definition error.hpp:307
std::expected< T, std::error_code > result
result type wrapping a value or error code.
Definition error.hpp:120