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; }
130 void setMulticastLoopback(
bool enable) { _multicastLoopback = enable; }
133 bool multicastLoopback()
const {
return _multicastLoopback; }
139 void setReuseAddress(
bool enable) { _reuseAddress = enable; }
142 bool reuseAddress()
const {
return _reuseAddress; }
152 void setReceiveBufferSize(
int bytes) { _recvBufferSize = bytes; }
155 int receiveBufferSize()
const {
return _recvBufferSize; }
165 void setSendBufferSize(
int bytes) { _sendBufferSize = bytes; }
168 int sendBufferSize()
const {
return _sendBufferSize; }
181 UdpSocket *socket()
const {
return _socket.get(); }
184 Error open()
override;
187 void close()
override;
190 bool isOpen()
const override;
193 ssize_t sendPacket(
const void *data,
size_t size,
const SocketAddress &dest)
override;
196 int sendPackets(
const DatagramList &datagrams)
override;
199 ssize_t receivePacket(
void *data,
size_t maxSize, SocketAddress *sender =
nullptr)
override;
202 Error setPacingRate(uint64_t bytesPerSec)
override;
205 Error setTxTime(
bool enable)
override;
208 UdpSocket::UPtr _socket;
209 SocketAddress _localAddress;
210 String _multicastInterface;
211 int _recvBufferSize = 0;
212 int _sendBufferSize = 0;
214 int _multicastTTL = 0;
216 bool _reuseAddress =
false;
217 bool _multicastLoopback =
false;