1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- #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
|