4#ifndef _Stroika_Foundation_IO_Network_ConnectionlessSocket_h_
5#define _Stroika_Foundation_IO_Network_ConnectionlessSocket_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
18 namespace ConnectionlessSocket {
19 using namespace Socket;
43 Ptr (
const Ptr& src) =
default;
45 Ptr (shared_ptr<_IRep>&& rep);
46 Ptr (
const shared_ptr<_IRep>& rep);
51 nonvirtual
Ptr& operator= (
const Ptr& rhs) =
default;
52 nonvirtual
Ptr& operator= (
Ptr&& rhs) =
default;
117 nonvirtual shared_ptr<_IRep> _GetSharedRep ()
const;
123 nonvirtual _IRep&
_ref ()
const;
129 nonvirtual
const _IRep&
_cref ()
const;
132 [[deprecated (
"Since Stroika 3.0d15 use span{} overload")]]
size_t ReceiveFrom (
byte* intoStart,
byte* intoEnd,
int flag,
136 return ReceiveFrom (span{intoStart, intoEnd}, flag, fromAddress, timeout).size ();
138 [[deprecated (
"Since Stroika v3.0d15 use span overload")]]
void SendTo (
const byte* start,
const byte* end,
const SocketAddress& sockAddr)
const
140 SendTo (span<const byte>{start, end}, sockAddr);
146 class _IRep :
public Socket::_IRep {
148 virtual ~_IRep () =
default;
150 virtual void SendTo (
const byte* start,
const byte* end,
const SocketAddress& sockAddr) = 0;
154 virtual uint8_t GetMulticastTTL ()
const = 0;
155 virtual void SetMulticastTTL (uint8_t ttl) = 0;
156 virtual bool GetMulticastLoopMode ()
const = 0;
157 virtual void SetMulticastLoopMode (
bool loopMode) = 0;
193 template <
typename T>
194 struct WaitForIOReady_Traits;
196 struct WaitForIOReady_Traits<IO::Network::ConnectionlessSocket::Ptr> {
198 static inline auto GetSDKPollable (
const HighLevelType& t)
211#include "ConnectionlessSocket.inl"
chrono::duration< double > DurationSeconds
chrono::duration<double> - a time span (length of time) measured in seconds, but high precision.
nonvirtual void SendTo(span< const byte > data, const SocketAddress &sockAddr) const
nonvirtual _IRep & _ref() const
nonvirtual span< byte > ReceiveFrom(span< byte > into, int flag, SocketAddress *fromAddress, Time::DurationSeconds timeout=Time::kInfinity) const
nonvirtual void SetMulticastLoopMode(bool loopMode) const
nonvirtual void SetMulticastTTL(uint8_t ttl) const
nonvirtual const _IRep & _cref() const
nonvirtual uint8_t GetMulticastTTL() const
nonvirtual bool GetMulticastLoopMode() const
a smart pointer wrapper (like shared_ptr <_IRep>).
nonvirtual PlatformNativeHandle GetNativeSocket() const
FamilyType
Socket address family - also sometimes referred to as domain (argument to ::socket calls it domain)
Ptr Attach(PlatformNativeHandle sd)
ConnectionlessSocket::Ptr New(SocketAddress::FamilyType family, Type socketKind, const optional< IPPROTO > &protocol=nullopt)