TARAXA
dev::p2p::UDPSocket< Handler, MaxDatagramSize > Class Template Reference

UDP Interface Handler must implement UDPSocketEvents. More...

#include <UDP.h>

Collaboration diagram for dev::p2p::UDPSocket< Handler, MaxDatagramSize >:

Public Types

enum  { maxDatagramSize = MaxDatagramSize }
 

Public Member Functions

 UDPSocket (ba::strand< ba::io_context::executor_type > &_strand, UDPSocketEvents &_host, bi::udp::endpoint _endpoint)
 Create socket for specific endpoint. More...
 
 UDPSocket (ba::strand< ba::io_context::executor_type > &_strand, UDPSocketEvents &_host, unsigned _port)
 Create socket which listens to all ports. More...
 
virtual ~UDPSocket ()
 
void connect ()
 Socket will begin listening for and delivering packets. More...
 
bool send (UDPDatagram const &_datagram) override
 Send datagram. More...
 
bool isOpen ()
 Returns if socket is open. More...
 
void disconnect () override
 Disconnect socket. More...
 

Protected Member Functions

void doRead ()
 
void doWrite ()
 
void disconnectWithError (boost::system::error_code _ec)
 

Protected Attributes

std::atomic< bool > m_started {}
 
std::atomic< bool > m_closed {}
 Connection availability. More...
 
UDPSocketEventsm_host
 Interface which owns this socket. More...
 
bi::udp::endpoint m_endpoint
 Endpoint which we listen to. More...
 
Mutex x_sendQ
 
std::deque< UDPDatagramm_sendQ
 Queue for egress data. More...
 
std::array< byte, maxDatagramSizem_recvData
 Buffer for ingress data. More...
 
bi::udp::endpoint m_recvEndpoint
 Endpoint data was received from. More...
 
bi::udp::socket m_socket
 Boost asio udp socket. More...
 
Mutex x_socketError
 
boost::system::error_code m_socketError
 Set when shut down due to error. More...
 
ba::strand< ba::io_context::executor_type > & strand_
 

Additional Inherited Members

Detailed Description

template<typename Handler, unsigned MaxDatagramSize>
class dev::p2p::UDPSocket< Handler, MaxDatagramSize >

UDP Interface Handler must implement UDPSocketEvents.

Todo:

multiple endpoints (we cannot advertise 0.0.0.0)

decouple deque from UDPDatagram and add ref() to datagram for fire&forget

Member Enumeration Documentation

◆ anonymous enum

template<typename Handler , unsigned MaxDatagramSize>
anonymous enum
Enumerator
maxDatagramSize 

Constructor & Destructor Documentation

◆ UDPSocket() [1/2]

template<typename Handler , unsigned MaxDatagramSize>
dev::p2p::UDPSocket< Handler, MaxDatagramSize >::UDPSocket ( ba::strand< ba::io_context::executor_type > &  _strand,
UDPSocketEvents _host,
bi::udp::endpoint  _endpoint 
)
inline

Create socket for specific endpoint.

◆ UDPSocket() [2/2]

template<typename Handler , unsigned MaxDatagramSize>
dev::p2p::UDPSocket< Handler, MaxDatagramSize >::UDPSocket ( ba::strand< ba::io_context::executor_type > &  _strand,
UDPSocketEvents _host,
unsigned  _port 
)
inline

Create socket which listens to all ports.

◆ ~UDPSocket()

template<typename Handler , unsigned MaxDatagramSize>
virtual dev::p2p::UDPSocket< Handler, MaxDatagramSize >::~UDPSocket ( )
inlinevirtual

Member Function Documentation

◆ connect()

template<typename Handler , unsigned MaxDatagramSize>
void dev::p2p::UDPSocket< Handler, MaxDatagramSize >::connect

Socket will begin listening for and delivering packets.

◆ disconnect()

template<typename Handler , unsigned MaxDatagramSize>
void dev::p2p::UDPSocket< Handler, MaxDatagramSize >::disconnect ( )
inlineoverridevirtual

Disconnect socket.

Implements dev::p2p::UDPSocketFace.

◆ disconnectWithError()

template<typename Handler , unsigned MaxDatagramSize>
void dev::p2p::UDPSocket< Handler, MaxDatagramSize >::disconnectWithError ( boost::system::error_code  _ec)
protected

◆ doRead()

template<typename Handler , unsigned MaxDatagramSize>
void dev::p2p::UDPSocket< Handler, MaxDatagramSize >::doRead
protected

◆ doWrite()

template<typename Handler , unsigned MaxDatagramSize>
void dev::p2p::UDPSocket< Handler, MaxDatagramSize >::doWrite
protected

◆ isOpen()

template<typename Handler , unsigned MaxDatagramSize>
bool dev::p2p::UDPSocket< Handler, MaxDatagramSize >::isOpen ( )
inline

Returns if socket is open.

◆ send()

template<typename Handler , unsigned MaxDatagramSize>
bool dev::p2p::UDPSocket< Handler, MaxDatagramSize >::send ( UDPDatagram const &  _datagram)
overridevirtual

Send datagram.

Implements dev::p2p::UDPSocketFace.

Member Data Documentation

◆ m_closed

template<typename Handler , unsigned MaxDatagramSize>
std::atomic<bool> dev::p2p::UDPSocket< Handler, MaxDatagramSize >::m_closed {}
protected

Connection availability.

◆ m_endpoint

template<typename Handler , unsigned MaxDatagramSize>
bi::udp::endpoint dev::p2p::UDPSocket< Handler, MaxDatagramSize >::m_endpoint
protected

Endpoint which we listen to.

◆ m_host

template<typename Handler , unsigned MaxDatagramSize>
UDPSocketEvents& dev::p2p::UDPSocket< Handler, MaxDatagramSize >::m_host
protected

Interface which owns this socket.

◆ m_recvData

template<typename Handler , unsigned MaxDatagramSize>
std::array<byte, maxDatagramSize> dev::p2p::UDPSocket< Handler, MaxDatagramSize >::m_recvData
protected

Buffer for ingress data.

◆ m_recvEndpoint

template<typename Handler , unsigned MaxDatagramSize>
bi::udp::endpoint dev::p2p::UDPSocket< Handler, MaxDatagramSize >::m_recvEndpoint
protected

Endpoint data was received from.

◆ m_sendQ

template<typename Handler , unsigned MaxDatagramSize>
std::deque<UDPDatagram> dev::p2p::UDPSocket< Handler, MaxDatagramSize >::m_sendQ
protected

Queue for egress data.

◆ m_socket

template<typename Handler , unsigned MaxDatagramSize>
bi::udp::socket dev::p2p::UDPSocket< Handler, MaxDatagramSize >::m_socket
protected

Boost asio udp socket.

◆ m_socketError

template<typename Handler , unsigned MaxDatagramSize>
boost::system::error_code dev::p2p::UDPSocket< Handler, MaxDatagramSize >::m_socketError
protected

Set when shut down due to error.

◆ m_started

template<typename Handler , unsigned MaxDatagramSize>
std::atomic<bool> dev::p2p::UDPSocket< Handler, MaxDatagramSize >::m_started {}
protected

Atomically ensure connection is started once. Start cannot occur unless m_started is false. Managed by start and disconnectWithError.

◆ strand_

template<typename Handler , unsigned MaxDatagramSize>
ba::strand<ba::io_context::executor_type>& dev::p2p::UDPSocket< Handler, MaxDatagramSize >::strand_
protected

◆ x_sendQ

template<typename Handler , unsigned MaxDatagramSize>
Mutex dev::p2p::UDPSocket< Handler, MaxDatagramSize >::x_sendQ
protected

◆ x_socketError

template<typename Handler , unsigned MaxDatagramSize>
Mutex dev::p2p::UDPSocket< Handler, MaxDatagramSize >::x_socketError
protected

Mutex for error which can be set from host or IO thread.


The documentation for this class was generated from the following file: