00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef CONEXUS_IPV4TCP_H
00020 #define CONEXUS_IPV4TCP_H
00021
00022 #include <boost/shared_ptr.hpp>
00023
00024 #include <conexus/ipv4_ip.h>
00025
00042 namespace Conexus
00043 {
00044
00045 namespace IPv4
00046 {
00047
00054 class TCP : public IP
00055 {
00056 public:
00057 friend class TCPServer;
00058
00059 typedef boost::shared_ptr<TCP> pointer;
00060
00061 TCP(uint16_t port=0);
00062
00063 static TCP::pointer create(uint16_t port=0);
00064
00065 virtual ~TCP() throw();
00066
00071 int pending_input_size();
00072
00076 int pending_output_size();
00077
00082 virtual ssize_t write(const void* data, size_t size) throw (write_error);
00083
00090 virtual Data read(size_t s = -1) throw (read_error);
00091
00092 virtual void connect() throw (connect_error);
00093 virtual void connect(Address& a) throw (connect_error)
00094 {
00095 Socket::connect(a);
00096 }
00097
00098 virtual const std::string& object_type() { static std::string s("Conexus::IPv4::TCP"); return s; }
00099
00100 protected:
00101
00106 TCP(int accepted_fd, bool);
00107
00108 static TCP::pointer create(int accepted_fd, bool);
00109
00110 virtual void on_local_interface_changed(unsigned which);
00111 virtual void on_remote_address_changed(unsigned which);
00112 };
00113
00114 }
00115
00116 }
00117
00118 #endif