Stroika Library 3.0d25
 
Loading...
Searching...
No Matches
ConnectionlessSocket.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2026. All rights reserved
3 */
5
7
8 /*
9 ********************************************************************************
10 ************ Foundation::IO::Network::ConnectionlessSocket::Ptr ****************
11 ********************************************************************************
12 */
13 inline ConnectionlessSocket::Ptr::Ptr (nullptr_t)
14 : Socket::Ptr{nullptr}
15 {
16 }
17 inline ConnectionlessSocket::Ptr::Ptr (const shared_ptr<_IRep>& rep)
18 : Socket::Ptr{rep}
19 {
20 }
21 inline ConnectionlessSocket::Ptr::Ptr (shared_ptr<_IRep>&& rep)
22 : Socket::Ptr{move (rep)}
23 {
24 }
25 inline uint8_t ConnectionlessSocket::Ptr::GetMulticastTTL () const
26 {
27 Debug::AssertExternallySynchronizedChecker::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
28 return _cref ().GetMulticastTTL ();
29 }
30 inline void ConnectionlessSocket::Ptr::SetMulticastTTL (uint8_t ttl) const
31 {
32 Debug::AssertExternallySynchronizedChecker::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
33 _ref ().SetMulticastTTL (ttl);
34 }
35 inline bool ConnectionlessSocket::Ptr::GetMulticastLoopMode () const
36 {
37 Debug::AssertExternallySynchronizedChecker::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
38 return _cref ().GetMulticastLoopMode ();
39 }
40 inline void ConnectionlessSocket::Ptr::SetMulticastLoopMode (bool loopMode) const
41 {
42 Debug::AssertExternallySynchronizedChecker::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
43 _ref ().SetMulticastLoopMode (loopMode);
44 }
45 inline void ConnectionlessSocket::Ptr::JoinMulticastGroup (const InternetAddress& iaddr, const InternetAddress& onInterface) const
46 {
47 Debug::AssertExternallySynchronizedChecker::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
48 _ref ().JoinMulticastGroup (iaddr, onInterface);
49 }
50 inline void ConnectionlessSocket::Ptr::LeaveMulticastGroup (const InternetAddress& iaddr, const InternetAddress& onInterface) const
51 {
52 Debug::AssertExternallySynchronizedChecker::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
53 _ref ().LeaveMulticastGroup (iaddr, onInterface);
54 }
55 inline void ConnectionlessSocket::Ptr::JoinMulticastGroup (const InternetAddress& iaddr, unsigned int onInterfaceIndex) const
56 {
57 Debug::AssertExternallySynchronizedChecker::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
58 _ref ().JoinMulticastGroup (iaddr, onInterfaceIndex);
59 }
60 inline void ConnectionlessSocket::Ptr::LeaveMulticastGroup (const InternetAddress& iaddr, unsigned int onInterfaceIndex) const
61 {
62 Debug::AssertExternallySynchronizedChecker::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
63 _ref ().LeaveMulticastGroup (iaddr, onInterfaceIndex);
64 }
65 inline void ConnectionlessSocket::Ptr::SetMulticastInterface (const InternetAddress& interfaceAddress) const
66 {
67 Debug::AssertExternallySynchronizedChecker::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
68 _ref ().SetMulticastInterface (interfaceAddress);
69 }
70 inline void ConnectionlessSocket::Ptr::SetMulticastInterface (unsigned int interfaceIndex) const
71 {
72 Debug::AssertExternallySynchronizedChecker::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
73 _ref ().SetMulticastInterface (interfaceIndex);
74 }
75 inline void ConnectionlessSocket::Ptr::SendTo (span<const byte> data, const SocketAddress& sockAddr) const
76 {
77 Debug::AssertExternallySynchronizedChecker::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
78 _ref ().SendTo (data.data (), data.data () + data.size (), sockAddr);
79 }
80 inline bool ConnectionlessSocket::Ptr::GetReceivePacketInfo () const
81 {
82 Debug::AssertExternallySynchronizedChecker::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
83 return _cref ().GetReceivePacketInfo ();
84 }
85 inline void ConnectionlessSocket::Ptr::SetReceivePacketInfo (bool on) const
86 {
87 Debug::AssertExternallySynchronizedChecker::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
88 _ref ().SetReceivePacketInfo (on);
89 }
90 inline span<byte> ConnectionlessSocket::Ptr::ReceiveFrom (span<byte> into, int flag, SocketAddress* fromAddress, Time::DurationSeconds timeout) const
91 {
92 return ReceiveFrom (into, flag, fromAddress, nullptr, timeout);
93 }
94 inline span<byte> ConnectionlessSocket::Ptr::ReceiveFrom (span<byte> into, int flag, SocketAddress* fromAddress,
95 optional<PacketInfo>* packetInfo, Time::DurationSeconds timeout) const
96 {
97 Debug::AssertExternallySynchronizedChecker::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
98 size_t r = _ref ().ReceiveFrom (into.data (), into.data () + into.size (), flag, fromAddress, packetInfo, timeout);
99 return into.subspan (0, r);
100 }
101 inline shared_ptr<ConnectionlessSocket::_IRep> ConnectionlessSocket::Ptr::_GetSharedRep () const
102 {
103 Debug::AssertExternallySynchronizedChecker::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
104 return Debug::UncheckedDynamicPointerCast<ConnectionlessSocket::_IRep> (inherited::_GetSharedRep ());
105 }
106 inline ConnectionlessSocket::_IRep& ConnectionlessSocket::Ptr::_ref () const
107 {
108 AssertMember (&inherited::_ref (), _IRep);
109 return *reinterpret_cast<_IRep*> (&inherited::_ref ());
110 }
111 inline const ConnectionlessSocket::_IRep& ConnectionlessSocket::Ptr::_cref () const
112 {
113 AssertMember (&inherited::_cref (), _IRep);
114 return *reinterpret_cast<const _IRep*> (&inherited::_cref ());
115 }
116
117}
#define AssertMember(p, c)
Definition Assertions.h:315
chrono::duration< double > DurationSeconds
chrono::duration<double> - a time span (length of time) measured in seconds, but high precision.
Definition Realtime.h:57
shared_lock< const AssertExternallySynchronizedChecker > ReadContext
Instantiate AssertExternallySynchronizedChecker::ReadContext to designate an area of code where prote...