Bytemaster's Boost Libraries
|
00001 #ifndef _BOOST_CMT_ASIO_TCP_SOCKET_HPP 00002 #define _BOOST_CMT_ASIO_TCP_SOCKET_HPP 00003 #include <boost/asio.hpp> 00004 00005 namespace boost { namespace cmt { namespace asio { namespace tcp { 00006 namespace detail { struct socket; } 00007 00011 class socket : public boost::asio::ip::tcp::socket { 00012 public: 00013 typedef boost::shared_ptr<socket> ptr; 00014 00015 socket(); 00016 ~socket(); 00017 00018 boost::system::error_code connect( const boost::asio::ip::tcp::endpoint& ep ); 00019 00023 struct iterator : public std::iterator<std::input_iterator_tag,char,void> { 00024 iterator( boost::cmt::asio::tcp::socket* _s = NULL) 00025 :s(_s){ if(_s){++*this;} } 00026 00027 inline const char& operator*()const { return value; } 00028 inline const char* operator->()const { return &value; } 00029 inline char& operator*() { return value; } 00030 inline char* operator->(){ return &value; } 00031 00032 iterator& operator++(); 00033 iterator operator++(int); 00034 00035 bool operator == ( const iterator& i )const { return s == i.s; } 00036 bool operator != ( const iterator& i )const { return s != i.s; } 00037 00038 private: 00039 char value; 00040 boost::cmt::asio::tcp::socket* s; 00041 }; 00042 00043 size_t read_some( char* buffer, size_t size ); 00044 size_t read( char* buffer, size_t size ); 00045 size_t write( const char* buffer, size_t size ); 00046 00047 void flush(); 00048 private: 00049 detail::socket* my; 00050 }; 00051 00052 } } } } // namespace boost::cmt::asio::tcp 00053 00054 #endif