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
276 Error setReceivePktInfo(bool enable);
277
299 int64_t readDatagramWithIfIndex(void *data, size_t maxSize,
300 SocketAddress *sender = nullptr,
301 unsigned int *ifindex = nullptr);
302
307 bool hasPendingDatagrams() const;
308
313 int64_t pendingDatagramSize() const;
314
320 Error joinMulticastGroup(const SocketAddress &group);
321
328 Error joinMulticastGroup(const SocketAddress &group, const String &iface);
329
335 Error leaveMulticastGroup(const SocketAddress &group);
336
342 Error setMulticastTTL(int ttl);
343
353 Error setMulticastLoopback(bool enable);
354
360 Error setMulticastInterface(const String &iface);
361
383 Error setBindInterface(const String &iface);
384
394 Error setReuseAddress(bool enable);
395
406 Error setDscp(uint8_t dscp);
407
430 Error setDontFragment(bool enable);
431
452 Error setReceiveBufferSize(int bytes);
453
468 Error setSendBufferSize(int bytes);
469
470 private:
471 int _domain = 0;
472};
473
474PROMEKI_NAMESPACE_END
475
476#endif // PROMEKI_ENABLE_NETWORK