5 #ifndef SRC_IO_UDP_SERVER_H_
6 #define SRC_IO_UDP_SERVER_H_
10 #include <boost/asio.hpp>
11 #include <boost/intrusive_ptr.hpp>
20 typedef boost::asio::ip::udp::endpoint
Endpoint;
21 typedef boost::asio::ip::udp::socket
Socket;
32 explicit UdpServer(boost::asio::io_context *io_service,
37 virtual bool Initialize(
const std::string &ipaddress,
unsigned short port);
38 virtual bool Initialize(boost::asio::ip::udp::endpoint local_endpoint);
43 void StartSend(boost::asio::ip::udp::endpoint ep, std::size_t bytes_to_send,
44 boost::asio::const_buffer buffer);
50 boost::system::error_code *error)
const;
73 const boost::asio::const_buffer &recv_buffer,
74 boost::asio::ip::udp::endpoint remote_endpoint,
75 std::size_t bytes_transferred,
76 const boost::system::error_code& error);
78 virtual void OnRead(
const boost::asio::const_buffer &recv_buffer,
79 const boost::asio::ip::udp::endpoint &remote_endpoint);
94 const boost::asio::ip::udp::endpoint &remote_endpoint)
const;
97 virtual void HandleSend(boost::asio::const_buffer send_buffer,
98 boost::asio::ip::udp::endpoint remote_endpoint,
99 std::size_t bytes_transferred,
100 const boost::system::error_code& error);
106 void SetName(boost::asio::ip::udp::endpoint ep);
110 boost::asio::const_buffer recv_buffer,
111 std::size_t bytes_transferred,
112 const boost::system::error_code& error);
116 boost::asio::ip::udp::endpoint remote_endpoint,
117 std::size_t bytes_transferred,
118 const boost::system::error_code& error);
143 int prev = server->
refcount_.fetch_and_decrement();
158 #endif // SRC_IO_UDP_SERVER_H_
int intrusive_ptr_add_ref(const AsPath *cpath)
boost::intrusive_ptr< UdpServer > UdpServerPtr
boost::asio::ip::udp::endpoint remote_endpoint_
virtual int reader_task_instance(const boost::asio::ip::udp::endpoint &remote_endpoint) const
boost::asio::ip::udp::socket Socket
boost::asio::ip::udp::endpoint Endpoint
void DeallocateBuffer(const boost::asio::const_buffer &buffer)
friend void intrusive_ptr_add_ref(UdpServer *server)
const io::SocketStats & GetSocketStats() const
boost::asio::mutable_buffer AllocateBuffer()
static ServerManager< UdpServer, UdpServerPtr > impl_
virtual std::string ToString()
void HandleReceiveInternal(boost::asio::const_buffer recv_buffer, std::size_t bytes_transferred, const boost::system::error_code &error)
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 GetRxSocketStats(SocketIOStats *socket_stats) const
tbb::atomic< int > refcount_
void GetTxSocketStats(SocketIOStats *socket_stats) const
boost::asio::ip::udp::socket socket_
void SetName(boost::asio::ip::udp::endpoint ep)
EventManager * event_manager()
virtual void OnRead(const boost::asio::const_buffer &recv_buffer, const boost::asio::ip::udp::endpoint &remote_endpoint)
std::vector< uint8_t * > pbuf_
void StartSend(boost::asio::ip::udp::endpoint ep, std::size_t bytes_to_send, boost::asio::const_buffer buffer)
virtual int reader_task_id() const
static const int kDefaultBufferSize
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)
boost::asio::ip::udp::endpoint GetLocalEndpoint(boost::system::error_code *error) const
UdpServer(EventManager *evm, int buffer_size=kDefaultBufferSize)
DISALLOW_COPY_AND_ASSIGN(UdpServer)
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)
friend void intrusive_ptr_release(UdpServer *server)
static int reader_task_id_
static void DeleteServer(UdpServer *server)
void intrusive_ptr_release(const AsPath *cpath)
std::string GetLocalEndpointAddress() const
static void AddServer(UdpServer *server)
virtual bool DisableSandeshLogMessages()
int GetLocalEndpointPort() const
ServerState GetServerState() const
virtual bool Initialize(unsigned short port)