00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef CONEXUS_IPV6UDP_H
00020 #define CONEXUS_IPV6UDP_H
00021
00022 #include <conexus/ipv6_ip.h>
00023
00040 namespace Conexus
00041 {
00042
00043 namespace IPv6
00044 {
00045
00052 class UDP : public IP
00053 {
00054 public:
00055 typedef ConexusPointer<UDP> pointer;
00056
00057 UDP( uint16_t localport = 0, uint16_t remoteport = 0 );
00058
00059 static UDP::pointer create( uint16_t localport = 0, uint16_t remoteport = 0 );
00060
00061 virtual ~UDP() throw();
00062
00063 virtual ssize_t input_available();
00064
00065 virtual void bind() throw ( bind_exception );
00066
00067 virtual void bind( Conexus::Address& a ) throw ( bind_exception );
00068
00069 virtual void close() throw ( close_exception );
00070
00074 virtual int output_pending();
00075
00076 virtual void connect() throw ( connect_exception );
00077
00078 virtual void connect( Address& a ) throw ( connect_exception ) {
00079 Socket::connect( a );
00080 }
00081
00099 virtual void set_write_without_connect( bool value = true );
00100
00101
00102 virtual bool write_without_connect() const;
00103
00104 virtual bool multicast_auto_join() const;
00105
00106 virtual void set_multicast_auto_join( bool value = true );
00107
00111 virtual int multicast_hops();
00112
00116 virtual void set_multicast_hops( int hops );
00117
00121 virtual bool multicast_loop();
00122
00126 virtual void set_multicast_loop( bool loop );
00127
00132
00133
00138
00139
00140
00141
00142 virtual const std::string& object_type() { static std::string s("Conexus::IPv6::UDP"); return s; }
00143
00144 protected:
00145 bool m_write_without_connect;
00146 bool m_multicast_auto_join;
00147 struct ipv6_mreq* m_multicast_request;
00148
00149
00151 virtual void join();
00152
00154 virtual void leave();
00155
00156 virtual void on_local_interface_changed( unsigned which );
00157 virtual void on_remote_address_changed( unsigned which );
00158
00163 virtual ssize_t write_data(long int timeout, Data::const_pointer data) throw (write_exception);
00164
00171 virtual Data::pointer read_data(long int timeout, size_t s = 0) throw (read_exception);
00172 };
00173
00174 }
00175
00176 }
00177
00178 #endif