TARAXA
Loading...
Searching...
No Matches
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.
 
 UDPSocket (ba::strand< ba::io_context::executor_type > &_strand, UDPSocketEvents &_host, unsigned _port)
 Create socket which listens to all ports.
 
virtual ~UDPSocket ()
 
void connect ()
 Socket will begin listening for and delivering packets.
 
bool send (UDPDatagram const &_datagram) override
 Send datagram.
 
bool isOpen ()
 Returns if socket is open.
 
void disconnect () override
 Disconnect socket.
 

Protected Member Functions

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

Protected Attributes

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

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.

◆ net_logger_

template<typename Handler , unsigned MaxDatagramSize>
taraxa::logger::Logger dev::p2p::UDPSocket< Handler, MaxDatagramSize >::net_logger_
protected

◆ 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: