libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
udpsocket.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
13#include <promeki/buffer.h>
14#include <promeki/list.h>
16#include <promeki/uniqueptr.h>
17
18PROMEKI_NAMESPACE_BEGIN
19
53class UdpSocket : public AbstractSocket {
54 PROMEKI_OBJECT(UdpSocket, AbstractSocket)
55 public:
57 using UPtr = UniquePtr<UdpSocket>;
58
69 struct Datagram {
70 const void *data = nullptr;
71 size_t size = 0;
72 SocketAddress dest;
73 uint64_t txTimeNs =
74 0;
75 };
76
78 using DatagramList = ::promeki::List<Datagram>;
79
81 static constexpr uint64_t PacingRateUnlimited = ~static_cast<uint64_t>(0);
82
87 UdpSocket(ObjectBase *parent = nullptr);
88
90 ~UdpSocket() override;
91
101 Error open(OpenMode mode) override;
102
112 Error openIpv6(OpenMode mode);
113
118 Error close() override;
119
121 bool isOpen() const override { return _fd >= 0; }
122
132 int64_t read(void *data, int64_t maxSize) override;
133
143 int64_t write(const void *data, int64_t maxSize) override;
144
149 int64_t bytesAvailable() const override;
150
158 int64_t writeDatagram(const void *data, size_t size, const SocketAddress &dest);
159
166 int64_t writeDatagram(const Buffer &data, const SocketAddress &dest);
167
198 int writeDatagrams(const DatagramList &datagrams);
199
217 Error setPacingRate(uint64_t bytesPerSec);
218
223 Error clearPacingRate();
224
247 Error setTxTime(bool enable, int clockId = 11 /* CLOCK_TAI */);
248
256 int64_t readDatagram(void *data, size_t maxSize, SocketAddress *sender = nullptr);
257
262 bool hasPendingDatagrams() const;
263
268 int64_t pendingDatagramSize() const;
269
275 Error joinMulticastGroup(const SocketAddress &group);
276
283 Error joinMulticastGroup(const SocketAddress &group, const String &iface);
284
290 Error leaveMulticastGroup(const SocketAddress &group);
291
297 Error setMulticastTTL(int ttl);
298
308 Error setMulticastLoopback(bool enable);
309
315 Error setMulticastInterface(const String &iface);
316
326 Error setReuseAddress(bool enable);
327
338 Error setDscp(uint8_t dscp);
339
360 Error setReceiveBufferSize(int bytes);
361
376 Error setSendBufferSize(int bytes);
377
378 private:
379 int _domain = 0;
380};
381
382PROMEKI_NAMESPACE_END
383
384#endif // PROMEKI_ENABLE_NETWORK