1// Sun, 18 Jun 2000 2// Y.Takagi 3 4#ifndef __SocketStream_H 5#define __SocketStream_H 6 7#include <iostream> 8 9class Socket; 10 11class socketstreambuf : public streambuf { 12public: 13 explicit socketstreambuf(Socket *sock, streamsize n); 14 ~socketstreambuf(); 15 16protected: 17 virtual int underflow(); 18 virtual int overflow(int); 19 virtual int sync(); 20 21private: 22 Socket *__sock; 23 streamsize __alsize; 24 char *__pu; 25 char *__po; 26}; 27 28class socketstreambase : public virtual ios { 29public: 30 socketstreambuf *rdbuf(); 31 32protected: 33 socketstreambase(Socket *sock, streamsize n); 34 ~socketstreambase() {} 35 36private: 37 socketstreambuf buf; 38}; 39 40inline socketstreambuf *socketstreambase::rdbuf() 41{ 42 return &this->buf; 43} 44 45class isocketstream : public socketstreambase, public istream { 46public: 47 explicit isocketstream(Socket *sock, streamsize n = 4096); 48 virtual ~isocketstream(); 49}; 50 51 52class osocketstream : public socketstreambase, public ostream { 53public: 54 explicit osocketstream(Socket *sock, streamsize n = 4096); 55 virtual ~osocketstream(); 56}; 57 58#endif // __SocketStream_H 59