11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
19PROMEKI_NAMESPACE_BEGIN
60class UdpSocketTransport :
public PacketTransport {
63 using UPtr = UniquePtr<UdpSocketTransport>;
69 ~UdpSocketTransport()
override;
80 void setLocalAddress(
const SocketAddress &addr) { _localAddress = addr; }
83 const SocketAddress &localAddress()
const {
return _localAddress; }
89 void setIpv6(
bool enable) { _ipv6 = enable; }
92 bool isIpv6()
const {
return _ipv6; }
98 void setDscp(uint8_t dscp) { _dscp = dscp; }
101 uint8_t dscp()
const {
return _dscp; }
107 void setMulticastTTL(
int ttl) { _multicastTTL = ttl; }
110 int multicastTTL()
const {
return _multicastTTL; }
116 void setMulticastInterface(
const String &iface) { _multicastInterface = iface; }
119 const String &multicastInterface()
const {
return _multicastInterface; }
132 void setBindInterface(
const String &iface) { _bindInterface = iface; }
135 const String &bindInterface()
const {
return _bindInterface; }
146 void setMulticastLoopback(
bool enable) { _multicastLoopback = enable; }
149 bool multicastLoopback()
const {
return _multicastLoopback; }
155 void setReuseAddress(
bool enable) { _reuseAddress = enable; }
158 bool reuseAddress()
const {
return _reuseAddress; }
173 void setDontFragment(
bool enable) { _dontFragment = enable; }
176 bool dontFragment()
const {
return _dontFragment; }
186 void setReceiveBufferSize(
int bytes) { _recvBufferSize = bytes; }
189 int receiveBufferSize()
const {
return _recvBufferSize; }
199 void setSendBufferSize(
int bytes) { _sendBufferSize = bytes; }
202 int sendBufferSize()
const {
return _sendBufferSize; }
215 UdpSocket *socket()
const {
return _socket.get(); }
218 Error open()
override;
221 void close()
override;
224 bool isOpen()
const override;
227 ssize_t sendPacket(
const void *data,
size_t size,
const SocketAddress &dest)
override;
230 int sendPackets(
const DatagramList &datagrams)
override;
233 ssize_t receivePacket(
void *data,
size_t maxSize, SocketAddress *sender =
nullptr)
override;
236 Error setPacingRate(uint64_t bytesPerSec)
override;
239 Error setTxTime(
bool enable)
override;
242 UdpSocket::UPtr _socket;
243 SocketAddress _localAddress;
244 String _multicastInterface;
245 String _bindInterface;
246 int _recvBufferSize = 0;
247 int _sendBufferSize = 0;
249 int _multicastTTL = 0;
251 bool _reuseAddress =
false;
252 bool _multicastLoopback =
false;
253 bool _dontFragment =
false;