5 #ifndef SRC_IO_UDP_SERVER_H_
6 #define SRC_IO_UDP_SERVER_H_
13 #include <boost/asio.hpp>
14 #include <boost/intrusive_ptr.hpp>
23 typedef boost::asio::ip::udp::endpoint
Endpoint;
24 typedef boost::asio::ip::udp::socket
Socket;
35 explicit UdpServer(boost::asio::io_context *io_service,
40 virtual bool Initialize(
const std::string &ipaddress,
unsigned short port);
41 virtual bool Initialize(boost::asio::ip::udp::endpoint local_endpoint);
46 void StartSend(boost::asio::ip::udp::endpoint ep, std::size_t bytes_to_send,
47 boost::asio::const_buffer buffer);
53 boost::system::error_code *error)
const;
76 const boost::asio::const_buffer &recv_buffer,
77 boost::asio::ip::udp::endpoint remote_endpoint,
78 std::size_t bytes_transferred,
79 const boost::system::error_code& error);
81 virtual void OnRead(
const boost::asio::const_buffer &recv_buffer,
82 const boost::asio::ip::udp::endpoint &remote_endpoint);
97 const boost::asio::ip::udp::endpoint &remote_endpoint)
const;
100 virtual void HandleSend(boost::asio::const_buffer send_buffer,
101 boost::asio::ip::udp::endpoint remote_endpoint,
102 std::size_t bytes_transferred,
103 const boost::system::error_code& error);
109 void SetName(boost::asio::ip::udp::endpoint ep);
113 boost::asio::const_buffer recv_buffer,
114 std::size_t bytes_transferred,
115 const boost::system::error_code& error);
119 boost::asio::ip::udp::endpoint remote_endpoint,
120 std::size_t bytes_transferred,
121 const boost::system::error_code& error);
146 int prev = server->
refcount_.fetch_sub(1);
static ServerManager< UdpServer, UdpServerPtr > impl_
static void DeleteServer(UdpServer *server)
static void AddServer(UdpServer *server)
void HandleReceiveInternal(boost::asio::const_buffer recv_buffer, std::size_t bytes_transferred, const boost::system::error_code &error)
const io::SocketStats & GetSocketStats() const
std::vector< uint8_t * > pbuf_
UdpServer(EventManager *evm, int buffer_size=kDefaultBufferSize)
virtual bool Initialize(unsigned short port)
boost::asio::ip::udp::endpoint Endpoint
virtual int reader_task_instance(const boost::asio::ip::udp::endpoint &remote_endpoint) const
boost::asio::ip::udp::endpoint remote_endpoint_
boost::asio::ip::udp::socket socket_
friend void intrusive_ptr_add_ref(UdpServer *server)
boost::asio::ip::udp::socket Socket
virtual bool DisableSandeshLogMessages()
boost::asio::ip::udp::endpoint GetLocalEndpoint(boost::system::error_code *error) const
virtual void OnRead(const boost::asio::const_buffer &recv_buffer, const boost::asio::ip::udp::endpoint &remote_endpoint)
virtual bool Initialize(boost::asio::ip::udp::endpoint local_endpoint)
int GetLocalEndpointPort() const
boost::asio::mutable_buffer AllocateBuffer()
friend void intrusive_ptr_release(UdpServer *server)
virtual std::string ToString()
void GetTxSocketStats(SocketIOStats *socket_stats) const
virtual int reader_task_id() const
virtual void HandleReceive(const boost::asio::const_buffer &recv_buffer, boost::asio::ip::udp::endpoint remote_endpoint, std::size_t bytes_transferred, const boost::system::error_code &error)
static int reader_task_id_
DISALLOW_COPY_AND_ASSIGN(UdpServer)
void StartSend(boost::asio::ip::udp::endpoint ep, std::size_t bytes_to_send, boost::asio::const_buffer buffer)
std::atomic< int > refcount_
ServerState GetServerState() const
EventManager * event_manager()
void HandleSendInternal(boost::asio::const_buffer send_buffer, boost::asio::ip::udp::endpoint remote_endpoint, std::size_t bytes_transferred, const boost::system::error_code &error)
static const int kDefaultBufferSize
void GetRxSocketStats(SocketIOStats *socket_stats) const
void SetName(boost::asio::ip::udp::endpoint ep)
std::string GetLocalEndpointAddress() const
virtual void HandleSend(boost::asio::const_buffer send_buffer, boost::asio::ip::udp::endpoint remote_endpoint, std::size_t bytes_transferred, const boost::system::error_code &error)
void DeallocateBuffer(const boost::asio::const_buffer &buffer)
boost::intrusive_ptr< UdpServer > UdpServerPtr
void intrusive_ptr_add_ref(UdpServer *server)
void intrusive_ptr_release(UdpServer *server)