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)