11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
18PROMEKI_NAMESPACE_BEGIN
53class UdpSocket :
public AbstractSocket {
54 PROMEKI_OBJECT(UdpSocket, AbstractSocket)
57 using UPtr = UniquePtr<UdpSocket>;
70 const void *data =
nullptr;
78 using DatagramList = ::promeki::List<Datagram>;
81 static constexpr uint64_t PacingRateUnlimited = ~static_cast<uint64_t>(0);
87 UdpSocket(ObjectBase *parent =
nullptr);
90 ~UdpSocket()
override;
101 Error open(OpenMode mode)
override;
112 Error openIpv6(OpenMode mode);
118 Error close()
override;
121 bool isOpen()
const override {
return _fd >= 0; }
132 int64_t read(
void *data, int64_t maxSize)
override;
143 int64_t write(
const void *data, int64_t maxSize)
override;
149 int64_t bytesAvailable()
const override;
158 int64_t writeDatagram(
const void *data,
size_t size,
const SocketAddress &dest);
166 int64_t writeDatagram(
const Buffer &data,
const SocketAddress &dest);
198 int writeDatagrams(
const DatagramList &datagrams);
217 Error setPacingRate(uint64_t bytesPerSec);
223 Error clearPacingRate();
247 Error setTxTime(
bool enable,
int clockId = 11 );
256 int64_t readDatagram(
void *data,
size_t maxSize, SocketAddress *sender =
nullptr);
262 bool hasPendingDatagrams()
const;
268 int64_t pendingDatagramSize()
const;
275 Error joinMulticastGroup(
const SocketAddress &group);
283 Error joinMulticastGroup(
const SocketAddress &group,
const String &iface);
290 Error leaveMulticastGroup(
const SocketAddress &group);
297 Error setMulticastTTL(
int ttl);
308 Error setMulticastLoopback(
bool enable);
315 Error setMulticastInterface(
const String &iface);
326 Error setReuseAddress(
bool enable);
338 Error setDscp(uint8_t dscp);
360 Error setReceiveBufferSize(
int bytes);
376 Error setSendBufferSize(
int bytes);