00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef CONEXUSLL_PACKET_H
00020 #define CONEXUSLL_PACKET_H
00021
00022 #include <conexus/socket.h>
00023 #include <conexus/ll_address.h>
00024
00036 namespace Conexus
00037 {
00038
00039 namespace LL
00040 {
00041
00046 class Packet : public Socket
00047 {
00048 protected:
00049
00050 Packet( int protocol = ETH_P_IP, int type = SOCK_DGRAM );
00051
00052 public:
00053
00054 typedef ConexusPointer<Packet> pointer;
00055
00056 static Packet::pointer create( int protocol = ETH_P_IP, int type = SOCK_DGRAM );
00057
00058 virtual ~Packet() throw();
00059
00060 virtual void bind() throw ( bind_exception );
00061
00062 virtual void bind( Address& a ) throw ( bind_exception );
00063
00064 void set_interface( int );
00065
00066 void set_interface( const std::string );
00067
00068 int interface_index( const std::string name );
00069
00070 std::string interface_name( int ifindex );
00071
00072 std::vector<std::string> interface_names();
00073
00074 virtual ssize_t input_available();
00075
00076 protected:
00077 Address m_address;
00078 int m_protocol;
00079
00080 virtual ssize_t write_data( long int timeout, const Data data ) throw ( write_exception );
00081
00082 };
00083
00084 }
00085
00086 }
00087
00088 #endif