Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
ConnectionlessSocket.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. 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::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
28 return _cref ().GetMulticastTTL ();
29 }
30 inline void ConnectionlessSocket::Ptr::SetMulticastTTL (uint8_t ttl) const
31 {
32 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
33 _ref ().SetMulticastTTL (ttl);
34 }
35 inline bool ConnectionlessSocket::Ptr::GetMulticastLoopMode () const
36 {
37 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
38 return _cref ().GetMulticastLoopMode ();
39 }
40 inline void ConnectionlessSocket::Ptr::SetMulticastLoopMode (bool loopMode) const
41 {
42 Debug::AssertExternallySynchronizedMutex::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::AssertExternallySynchronizedMutex::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::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
53 _ref ().LeaveMulticastGroup (iaddr, onInterface);
54 }
55 inline void ConnectionlessSocket::Ptr::SendTo (span<const byte> data, const SocketAddress& sockAddr) const
56 {
57 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
58 _ref ().SendTo (data.data (), data.data () + data.size (), sockAddr);
59 }
60 inline span<byte> ConnectionlessSocket::Ptr::ReceiveFrom (span<byte> into, int flag, SocketAddress* fromAddress, Time::DurationSeconds timeout) const
61 {
62 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
63 size_t r = _ref ().ReceiveFrom (into.data (), into.data () + into.size (), flag, fromAddress, timeout);
64 return into.subspan (0, r);
65 }
66 inline shared_ptr<ConnectionlessSocket::_IRep> ConnectionlessSocket::Ptr::_GetSharedRep () const
67 {
68 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
69 return Debug::UncheckedDynamicPointerCast<ConnectionlessSocket::_IRep> (inherited::_GetSharedRep ());
70 }
71 inline ConnectionlessSocket::_IRep& ConnectionlessSocket::Ptr::_ref () const
72 {
73 AssertMember (&inherited::_ref (), _IRep);
74 return *reinterpret_cast<_IRep*> (&inherited::_ref ());
75 }
76 inline const ConnectionlessSocket::_IRep& ConnectionlessSocket::Ptr::_cref () const
77 {
78 AssertMember (&inherited::_cref (), _IRep);
79 return *reinterpret_cast<const _IRep*> (&inherited::_cref ());
80 }
81
82}
#define AssertMember(p, c)
Definition Assertions.h:312
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 AssertExternallySynchronizedMutex > ReadContext
Instantiate AssertExternallySynchronizedMutex::ReadContext to designate an area of code where protect...