Merge commit 'e988fee1679536137b87d10e939eff5c1f27c8ab' as 'libs/libzmq'
This commit is contained in:
92
libs/libzmq/src/udp_engine.hpp
Normal file
92
libs/libzmq/src/udp_engine.hpp
Normal file
@@ -0,0 +1,92 @@
|
||||
|
||||
#ifndef __ZMQ_UDP_ENGINE_HPP_INCLUDED__
|
||||
#define __ZMQ_UDP_ENGINE_HPP_INCLUDED__
|
||||
|
||||
#include "io_object.hpp"
|
||||
#include "i_engine.hpp"
|
||||
#include "address.hpp"
|
||||
#include "msg.hpp"
|
||||
|
||||
#define MAX_UDP_MSG 8192
|
||||
|
||||
namespace zmq
|
||||
{
|
||||
class io_thread_t;
|
||||
class session_base_t;
|
||||
|
||||
class udp_engine_t ZMQ_FINAL : public io_object_t, public i_engine
|
||||
{
|
||||
public:
|
||||
udp_engine_t (const options_t &options_);
|
||||
~udp_engine_t ();
|
||||
|
||||
int init (address_t *address_, bool send_, bool recv_);
|
||||
|
||||
bool has_handshake_stage () ZMQ_FINAL { return false; };
|
||||
|
||||
// i_engine interface implementation.
|
||||
// Plug the engine to the session.
|
||||
void plug (zmq::io_thread_t *io_thread_, class session_base_t *session_);
|
||||
|
||||
// Terminate and deallocate the engine. Note that 'detached'
|
||||
// events are not fired on termination.
|
||||
void terminate ();
|
||||
|
||||
// This method is called by the session to signalise that more
|
||||
// messages can be written to the pipe.
|
||||
bool restart_input ();
|
||||
|
||||
// This method is called by the session to signalise that there
|
||||
// are messages to send available.
|
||||
void restart_output ();
|
||||
|
||||
void zap_msg_available (){};
|
||||
|
||||
void in_event ();
|
||||
void out_event ();
|
||||
|
||||
const endpoint_uri_pair_t &get_endpoint () const;
|
||||
|
||||
private:
|
||||
int resolve_raw_address (const char *name_, size_t length_);
|
||||
static void sockaddr_to_msg (zmq::msg_t *msg_, const sockaddr_in *addr_);
|
||||
|
||||
static int set_udp_reuse_address (fd_t s_, bool on_);
|
||||
static int set_udp_reuse_port (fd_t s_, bool on_);
|
||||
// Indicate, if the multicast data being sent should be looped back
|
||||
static int set_udp_multicast_loop (fd_t s_, bool is_ipv6_, bool loop_);
|
||||
// Set multicast TTL
|
||||
static int set_udp_multicast_ttl (fd_t s_, bool is_ipv6_, int hops_);
|
||||
// Set multicast address/interface
|
||||
int set_udp_multicast_iface (fd_t s_,
|
||||
bool is_ipv6_,
|
||||
const udp_address_t *addr_);
|
||||
// Join a multicast group
|
||||
int add_membership (fd_t s_, const udp_address_t *addr_);
|
||||
|
||||
// Function to handle network issues.
|
||||
void error (error_reason_t reason_);
|
||||
|
||||
const endpoint_uri_pair_t _empty_endpoint;
|
||||
|
||||
bool _plugged;
|
||||
|
||||
fd_t _fd;
|
||||
session_base_t *_session;
|
||||
handle_t _handle;
|
||||
address_t *_address;
|
||||
|
||||
options_t _options;
|
||||
|
||||
sockaddr_in _raw_address;
|
||||
const struct sockaddr *_out_address;
|
||||
zmq_socklen_t _out_address_len;
|
||||
|
||||
char _out_buffer[MAX_UDP_MSG];
|
||||
char _in_buffer[MAX_UDP_MSG];
|
||||
bool _send_enabled;
|
||||
bool _recv_enabled;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user