00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef CONEXUS_IPV4UDP_H
00020 #define CONEXUS_IPV4UDP_H
00021
00022 #include <conexus/ipv4_ip.h>
00023
00040 namespace Conexus {
00041
00042 namespace IPv4 {
00043
00050 class UDP : public IP
00051 {
00052 public:
00053 typedef ConexusPointer<UDP> pointer;
00054
00055 UDP( uint16_t localport = 0, uint16_t remoteport = 0 );
00056
00057 static UDP::pointer create( uint16_t localport = 0, uint16_t remoteport = 0 );
00058
00059 virtual ~UDP() throw();
00060
00061 virtual ssize_t input_available();
00062
00063 virtual void bind() throw ( bind_exception );
00064
00065 virtual void bind( Conexus::Address& a ) throw ( bind_exception );
00066
00067 virtual void close() throw ( close_exception );
00068
00072 virtual int output_pending();
00073
00074 virtual void connect() throw ( connect_exception );
00075
00076 virtual void connect( Address& a ) throw ( connect_exception ) {
00077 Socket::connect( a );
00078 }
00079
00097 virtual void set_write_without_connect( bool value = true );
00098
00099
00100 virtual bool write_without_connect() const;
00101
00102 virtual bool multicast_auto_join() const;
00103
00104 virtual void set_multicast_auto_join( bool value = true );
00105
00109 virtual int multicast_hops();
00110
00114 virtual void set_multicast_hops( int hops );
00115
00119 virtual bool multicast_loop();
00120
00124 virtual void set_multicast_loop( bool loop );
00125
00130
00131
00136
00137
00138
00139
00140 virtual const std::string& object_type() {
00141 static std::string s( "Conexus::IPv4::UDP" );
00142 return s;
00143 }
00144
00145 protected:
00146 bool m_write_without_connect;
00147 bool m_multicast_auto_join;
00148 struct ip_mreq* m_multicast_request;
00149
00150
00152 virtual void join();
00153
00155 virtual void leave();
00156
00157 virtual void on_local_interface_changed( unsigned which );
00158 virtual void on_remote_address_changed( unsigned which );
00159
00164 virtual ssize_t write_data(long int timeout, Data::const_pointer data) throw (write_exception);
00165
00172 virtual Data::pointer read_data(long int timeout, size_t s = 0) throw (read_exception);
00173 };
00174
00175 }
00176
00177 }
00178
00179 #endif