00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00026 #ifndef OW32_StreamedSocket_h
00027 #define OW32_StreamedSocket_h
00028
00029 #include <OW32/Socket.h>
00030
00031
00032 namespace OW32
00033 {
00034
00038 template <class TSocket = CSocket>
00039 class CStreamedSocket :
00040 public TSocket
00041 {
00042 private:
00043 CStreamedSocket(const CStreamedSocket& );
00044 CStreamedSocket& operator=(const CStreamedSocket& );
00045
00046 public:
00047 CStreamedSocket() {}
00048
00049 CStreamedSocket(SOCKET s) :
00050 TSocket(s)
00051 {
00052 }
00053
00054
00055 virtual int recv(char* buf, int len)
00056 {
00057 int count=0;
00058
00059 do
00060 {
00061 int result = TSocket::recv(buf+count, len-count);
00062 if (result <= 0)
00063 return result;
00064 count += result;
00065 } while (count < len);
00066
00067 return count;
00068 }
00069
00070
00071 virtual int send(const char *buf, int len)
00072 {
00073 int count=0;
00074
00075 do
00076 {
00077 int result = TSocket::send(buf+count, len-count);
00078 if (result <= 0)
00079 return result;
00080 count += result;
00081 } while (count < len);
00082
00083 return count;
00084 }
00085 };
00086
00087 }
00088
00089 #endif // OW32_StreamedSocket_h