conexus logo

Conexus::IPv6::UDP Class Reference
[IPv6 EndpointsConexus I/O Endpoints]

IPv6 UDP Endpoint. More...

#include <ipv6_udp.h>

Inheritance diagram for Conexus::IPv6::UDP:

Inheritance graph
[legend]

List of all members.

Public Types

typedef ConexusPointer< UDPpointer

Public Member Functions

 CONEXUS_ENDPOINT_GENERIC_CREATE ()
virtual ~UDP () throw ()
 Automatically leaves any multicast groups this endpoint has joined.
virtual size_t input_available () throw ()
 Returns the amount of input currently available for reading.
virtual void bind () throw ( bind_exception )
 Binds the UDP endpoint to the local address.
virtual void bind (const Conexus::Address &a) throw ( bind_exception )
 Sets the local address to the given parameter and binds the endpoint.
virtual void close () throw ( close_exception )
 Closes the endpoint.
virtual int output_pending ()
 Returns the size in bytes of the local send queue.
virtual void connect () throw ( connect_exception )
 Connects the endpoint to the currently set remote address.
virtual void connect (const Address &a) throw ( connect_exception )
 Sets the remote address to the given parameter and connects to the given address.
virtual void set_write_without_connect (bool value=true)
 There are some circumstances in which it may be desirable to set a default address and have the send method transparently call the sendto method without connecting rather than connecting and calling the send method.
virtual bool write_without_connect () const
void add_multicast_interface (unsigned iface_index)
void add_multicast_interface (const std::string &iface_name)
void remove_multicast_interface (unsigned iface_index)
void remove_multicast_interface (const std::string &iface_name)
bool is_multicast_interface (unsigned iface_index)
bool is_multicast_interface (const std::string &iface_name)
virtual bool suppress_multicast_join () const
virtual void set_suppress_multicast_join (bool value=true)
virtual int multicast_hop_limit ()
 Returns the multicast ttl of the currently associated address.
virtual void set_multicast_hop_limit (int hop_limit)
 Sets the multicast ttl of the currently associated address to hop_limit.
virtual bool is_multicast_loopback_enabled ()
 If true multicast packets are looped back to local sockets.
virtual void enable_multicast_loopback (bool enable)
 If parameter enable is true then multicast packets are looped back to local sockets.

Static Public Member Functions

static pointer create (uint16_t localport=0, uint16_t remoteport=0)
 Creates a UDP endpoint on the default local interface with the given local and remote ports.
static pointer create (const struct in6_addr &local_if, uint16_t localport=0, uint16_t remoteport=0)
 Creates a UDP endpoint on the specified local interface with the given local and remote ports.
static pointer create (const std::string &local_if, uint16_t localport=0, uint16_t remoteport=0)
 Creates a UDP endpoint on the named local interface with the given local and remote ports.
static unsigned int default_multicast_hop_limit ()
static void set_default_multicast_hop_limit (unsigned int hop_limit)
static bool is_default_multicast_loopback_enabled ()
static void enable_default_multicast_loopback (bool enable)

Protected Member Functions

 UDP (const struct in6_addr &local_if, uint16_t localport, uint16_t remoteport, int proto=IPPROTO_UDP)
 UDP (const std::string &local_if, uint16_t localport, uint16_t remoteport, int proto=IPPROTO_UDP)
virtual void on_local_address_changed ()
virtual void on_remote_address_changed ()
virtual void join ()
 Issues a join on all multicast interfaces.
virtual void join (unsigned interface)
 Issues a join on the local address for the specified interface.
virtual void leave ()
 Issues a leave on all multicast interfaces.
virtual void leave (unsigned interface)
 Issues a leave on the local address for the specified interface.
virtual size_t write_data (const Data data, Timeout timeout) throw ( write_exception )
 Overloads the Socket ancestor send method to ensure that the socket is connected before trying to send.

Protected Attributes

bool m_write_without_connect
bool m_suppress_multicast_join
std::set< unsigned > m_multicast_interfaces

Static Protected Attributes

static unsigned int m_default_hop_limit = DEFAULT_IPV6_MULTICAST_HOPS
static bool m_default_loopback_enabled = DEFAULT_IPV6_MULTICAST_LOOP_BACK


Detailed Description

IPv6 UDP Endpoint.

Author:
Rick L Vinyard Jr <rvinyard@cs.nmsu.edu>
TODO Fix multicast loopback as in IPv4::UDP

Member Typedef Documentation

typedef ConexusPointer<UDP> Conexus::IPv6::UDP::pointer


Constructor & Destructor Documentation

Conexus::IPv6::UDP::UDP ( const struct in6_addr &  local_if,
uint16_t  localport,
uint16_t  remoteport,
int  proto = IPPROTO_UDP 
) [protected]

Conexus::IPv6::UDP::UDP ( const std::string &  local_if,
uint16_t  localport,
uint16_t  remoteport,
int  proto = IPPROTO_UDP 
) [protected]

Conexus::IPv6::UDP::~UDP (  )  throw () [virtual]

Automatically leaves any multicast groups this endpoint has joined.

References leave().


Member Function Documentation

void Conexus::IPv6::UDP::add_multicast_interface ( const std::string &  iface_name  ) 

void Conexus::IPv6::UDP::add_multicast_interface ( unsigned  iface_index  ) 

void Conexus::IPv6::UDP::bind ( const Conexus::Address a  )  throw ( bind_exception ) [virtual]

Sets the local address to the given parameter and binds the endpoint.

Reimplemented from Conexus::IPv6::IP.

Reimplemented in Conexus::IPv6::UDPPoset.

References Conexus::IPv6::IP::bind().

void Conexus::IPv6::UDP::bind (  )  throw ( bind_exception ) [virtual]

Binds the UDP endpoint to the local address.

Reimplemented from Conexus::IPv6::IP.

Reimplemented in Conexus::IPv6::UDPPoset.

References join(), Conexus::IPv6::IP::m_local_address, m_suppress_multicast_join, and Conexus::Socket::set_option().

void Conexus::IPv6::UDP::close (  )  throw ( close_exception ) [virtual]

Closes the endpoint.

Reimplemented in Conexus::IPv6::UDPPoset.

References leave().

Conexus::IPv6::UDP::CONEXUS_ENDPOINT_GENERIC_CREATE (  ) 

Reimplemented in Conexus::IPv6::UDPPoset.

void Conexus::IPv6::UDP::connect ( const Address &  a  )  throw ( connect_exception ) [virtual]

Sets the remote address to the given parameter and connects to the given address.

Reimplemented from Conexus::IPv6::IP.

Reimplemented in Conexus::IPv6::UDPPoset.

References Conexus::IPv6::IP::connect().

void Conexus::IPv6::UDP::connect (  )  throw ( connect_exception ) [virtual]

Connects the endpoint to the currently set remote address.

Reimplemented from Conexus::IPv6::IP.

Reimplemented in Conexus::IPv6::UDPPoset.

References join(), Conexus::IPv6::IP::m_remote_address, and m_suppress_multicast_join.

UDP::pointer Conexus::IPv6::UDP::create ( const std::string &  local_if,
uint16_t  localport = 0,
uint16_t  remoteport = 0 
) [static]

Creates a UDP endpoint on the named local interface with the given local and remote ports.

References UDP().

UDP::pointer Conexus::IPv6::UDP::create ( const struct in6_addr &  local_if,
uint16_t  localport = 0,
uint16_t  remoteport = 0 
) [static]

Creates a UDP endpoint on the specified local interface with the given local and remote ports.

References UDP().

UDP::pointer Conexus::IPv6::UDP::create ( uint16_t  localport = 0,
uint16_t  remoteport = 0 
) [static]

Creates a UDP endpoint on the default local interface with the given local and remote ports.

Examples:
ipv6_udp_client.cpp, ipv6_udp_server.cpp, and ipv6_udpposet_server.cpp.

References UDP().

unsigned int Conexus::IPv6::UDP::default_multicast_hop_limit (  )  [static]

References m_default_hop_limit.

void Conexus::IPv6::UDP::enable_default_multicast_loopback ( bool  enable  )  [static]

void Conexus::IPv6::UDP::enable_multicast_loopback ( bool  enable  )  [virtual]

If parameter enable is true then multicast packets are looped back to local sockets.

References Conexus::Socket::set_option().

Referenced by UDP().

size_t Conexus::IPv6::UDP::input_available (  )  throw () [virtual]

Returns the amount of input currently available for reading.

Reimplemented from Conexus::Endpoint.

References Conexus::FileDescriptor::m_fd.

bool Conexus::IPv6::UDP::is_default_multicast_loopback_enabled (  )  [static]

bool Conexus::IPv6::UDP::is_multicast_interface ( const std::string &  iface_name  ) 

bool Conexus::IPv6::UDP::is_multicast_interface ( unsigned  iface_index  ) 

bool Conexus::IPv6::UDP::is_multicast_loopback_enabled (  )  [virtual]

If true multicast packets are looped back to local sockets.

References Conexus::Socket::option().

void Conexus::IPv6::UDP::join ( unsigned  interface  )  [protected, virtual]

Issues a join on the local address for the specified interface.

References Conexus::Socket::is_bound(), Conexus::IPv6::IP::m_local_address, and Conexus::Socket::set_option().

void Conexus::IPv6::UDP::join (  )  [protected, virtual]

Issues a join on all multicast interfaces.

If no interfaces have been specified, then the join is issued on the system default.

References Conexus::Socket::is_bound(), Conexus::IPv6::IP::m_local_address, and m_multicast_interfaces.

Referenced by add_multicast_interface(), bind(), and connect().

void Conexus::IPv6::UDP::leave ( unsigned  interface  )  [protected, virtual]

Issues a leave on the local address for the specified interface.

References Conexus::Socket::is_bound(), Conexus::IPv6::IP::m_local_address, and Conexus::Socket::set_option().

void Conexus::IPv6::UDP::leave (  )  [protected, virtual]

Issues a leave on all multicast interfaces.

If no interfaces have been specified, then the leave is issued on the system default.

References Conexus::Socket::is_bound(), Conexus::IPv6::IP::m_local_address, and m_multicast_interfaces.

Referenced by close(), remove_multicast_interface(), and ~UDP().

int Conexus::IPv6::UDP::multicast_hop_limit (  )  [virtual]

Returns the multicast ttl of the currently associated address.

References Conexus::Socket::option().

void Conexus::IPv6::UDP::on_local_address_changed (  )  [protected, virtual]

void Conexus::IPv6::UDP::on_remote_address_changed (  )  [protected, virtual]

int Conexus::IPv6::UDP::output_pending (  )  [virtual]

Returns the size in bytes of the local send queue.

References Conexus::FileDescriptor::m_fd.

void Conexus::IPv6::UDP::remove_multicast_interface ( const std::string &  iface_name  ) 

void Conexus::IPv6::UDP::remove_multicast_interface ( unsigned  iface_index  ) 

void Conexus::IPv6::UDP::set_default_multicast_hop_limit ( unsigned int  hop_limit  )  [static]

void Conexus::IPv6::UDP::set_multicast_hop_limit ( int  hop_limit  )  [virtual]

Sets the multicast ttl of the currently associated address to hop_limit.

References Conexus::Socket::set_option().

Referenced by UDP().

void Conexus::IPv6::UDP::set_suppress_multicast_join ( bool  value = true  )  [virtual]

void Conexus::IPv6::UDP::set_write_without_connect ( bool  value = true  )  [virtual]

There are some circumstances in which it may be desirable to set a default address and have the send method transparently call the sendto method without connecting rather than connecting and calling the send method.

A specific example of this is when the remote address/port may occassionally be unavailable. In this case the destination may generate an ICMP UNREACHABLE message, and in accordance with RFC 1122 the local machine will fail any future sends on a connected port, throwing a write::connection_refused exception. If you want to ensure that the datagram is sent contrary to RFC 1122 you could set the default address, set send without connect and call send without throwing connection exceptions.

But, since this is contrary to RFC 1122 behavior you should really think about your design before setting this.

Reimplemented in Conexus::IPv6::UDPPoset.

References m_write_without_connect.

bool Conexus::IPv6::UDP::suppress_multicast_join (  )  const [virtual]

size_t Conexus::IPv6::UDP::write_data ( const Data  data,
Timeout  timeout 
) throw ( write_exception ) [protected, virtual]

Overloads the Socket ancestor send method to ensure that the socket is connected before trying to send.

Reimplemented from Conexus::Socket.

Reimplemented in Conexus::IPv6::UDPPoset.

References Conexus::ENDPOINT_OPENED, Conexus::SOCKET_CONNECTED, Conexus::Socket::write_data(), and Conexus::Socket::writeto().

bool Conexus::IPv6::UDP::write_without_connect (  )  const [virtual]


Member Data Documentation

unsigned int Conexus::IPv6::UDP::m_default_hop_limit = DEFAULT_IPV6_MULTICAST_HOPS [static, protected]

bool Conexus::IPv6::UDP::m_default_loopback_enabled = DEFAULT_IPV6_MULTICAST_LOOP_BACK [static, protected]

std::set<unsigned> Conexus::IPv6::UDP::m_multicast_interfaces [protected]


The documentation for this class was generated from the following files:

Generated on Wed Jul 8 15:51:28 2009 for conexus by doxygen 1.5.8