Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
ConnectionOrientedStreamSocket.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
5
7
8 /*
9 ********************************************************************************
10 ******* Foundation::IO::Network::ConnectionOrientedStreamSocket::Ptr ***********
11 ********************************************************************************
12 */
13 inline ConnectionOrientedStreamSocket::Ptr::Ptr (nullptr_t)
14 : inherited{nullptr}
15 {
16 }
17 inline ConnectionOrientedStreamSocket::Ptr::Ptr (shared_ptr<_IRep>&& rep)
18 : inherited{move (rep)}
19 {
20 }
21 inline ConnectionOrientedStreamSocket::Ptr::Ptr (const shared_ptr<_IRep>& rep)
22 : inherited{rep}
23 {
24 }
25 inline void ConnectionOrientedStreamSocket::Ptr::Close () const
26 {
27 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
28 inherited::Close ();
29 }
30 inline void ConnectionOrientedStreamSocket::Ptr::Connect (const SocketAddress& sockAddr) const
31 {
32 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
33 _ref ().Connect (sockAddr, nullopt);
34 }
35 inline void ConnectionOrientedStreamSocket::Ptr::Connect (const SocketAddress& sockAddr, const Time::Duration& timeout) const
36 {
37 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
38 _ref ().Connect (sockAddr, timeout);
39 }
40 inline span<byte> ConnectionOrientedStreamSocket::Ptr::Read (span<byte> into) const
41 {
42 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
43 return _ref ().Read (into);
44 }
45 inline optional<span<byte>> ConnectionOrientedStreamSocket::Ptr::ReadNonBlocking (span<byte> into) const
46 {
47 Require (not into.empty ());
48 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
49 return _ref ().ReadNonBlocking (into);
50 }
51 inline optional<size_t> ConnectionOrientedStreamSocket::Ptr::AvailableToRead () const
52 {
53 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
54 return _ref ().AvailableToRead ();
55 }
56 inline void ConnectionOrientedStreamSocket::Ptr::Write (span<const byte> data) const
57 {
58 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
59 _ref ().Write (data);
60 }
61 inline optional<IO::Network::SocketAddress> ConnectionOrientedStreamSocket::Ptr::GetPeerAddress () const
62 {
63 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
64 return _cref ().GetPeerAddress ();
65 }
66 inline optional<Time::DurationSeconds> ConnectionOrientedStreamSocket::Ptr::GetAutomaticTCPDisconnectOnClose () const
67 {
68 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
69 return _cref ().GetAutomaticTCPDisconnectOnClose ();
70 }
71 inline void ConnectionOrientedStreamSocket::Ptr::SetAutomaticTCPDisconnectOnClose (const optional<Time::DurationSeconds>& linger) const
72 {
73 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
74 _ref ().SetAutomaticTCPDisconnectOnClose (linger);
75 }
76 inline auto ConnectionOrientedStreamSocket::Ptr::GetKeepAlives () const -> KeepAliveOptions
77 {
78 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
79 return _cref ().GetKeepAlives ();
80 }
81 inline void ConnectionOrientedStreamSocket::Ptr::SetKeepAlives (const KeepAliveOptions& keepAliveOptions) const
82 {
83 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
84 _ref ().SetKeepAlives (keepAliveOptions);
85 }
86 inline auto ConnectionOrientedStreamSocket::Ptr::GetTCPNoDelay () const -> bool
87 {
88 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
89 return _cref ().GetTCPNoDelay ();
90 }
91 inline void ConnectionOrientedStreamSocket::Ptr::SetTCPNoDelay (bool noDelay) const
92 {
93 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
94 _ref ().SetTCPNoDelay (noDelay);
95 }
96 inline shared_ptr<ConnectionOrientedStreamSocket::_IRep> ConnectionOrientedStreamSocket::Ptr::_GetSharedRep () const
97 {
98 Debug::AssertExternallySynchronizedMutex::ReadContext declareContext{this->_fThisAssertExternallySynchronized};
99 return Debug::UncheckedDynamicPointerCast<ConnectionOrientedStreamSocket::_IRep> (inherited::_GetSharedRep ());
100 }
101 inline ConnectionOrientedStreamSocket::_IRep& ConnectionOrientedStreamSocket::Ptr::_ref () const
102 {
103 AssertMember (&inherited::_ref (), _IRep);
104 return *reinterpret_cast<_IRep*> (&inherited::_ref ());
105 }
106 inline const ConnectionOrientedStreamSocket::_IRep& ConnectionOrientedStreamSocket::Ptr::_cref () const
107 {
108 AssertMember (&inherited::_cref (), _IRep);
109 return *reinterpret_cast<const _IRep*> (&inherited::_cref ());
110 }
111
112 /*
113 ********************************************************************************
114 ********* Foundation::IO::Network::ConnectionOrientedStreamSocket **************
115 ********************************************************************************
116 */
117 inline ConnectionOrientedStreamSocket::Ptr ConnectionOrientedStreamSocket::NewConnection (const SocketAddress& sockAddr)
118 {
119 ConnectionOrientedStreamSocket::Ptr s = ConnectionOrientedStreamSocket::New (sockAddr.GetAddressFamily (), Socket::STREAM);
120 s.Connect (sockAddr);
121 return s;
122 }
123
124}
#define AssertMember(p, c)
Definition Assertions.h:312
shared_lock< const AssertExternallySynchronizedMutex > ReadContext
Instantiate AssertExternallySynchronizedMutex::ReadContext to designate an area of code where protect...
nonvirtual void Connect(const SocketAddress &sockAddr) const
Connects to the argument sockAddr;.
nonvirtual FamilyType GetAddressFamily() const
Duration is a chrono::duration<double> (=.
Definition Duration.h:96