zutil-cpp/net/socketstream.cpp

47 lines
957 B
C++

#include "socketstream.h"
using namespace zutil;
SocketStreamBuffer::SocketStreamBuffer(SocketIO &s) : soc(s){
pBeg = pBuffer;
pCur = pBuffer;
pEnd = pBuffer;
//pEnd = pBuffer + BUFFER_SIZE;
streambuf::setp(pBeg, pEnd);
gBeg = gBuffer;
gCur = gBuffer;
gEnd = gBuffer + BUFFER_SIZE;
streambuf::setg(gBeg, gCur, gEnd);
}
int SocketStreamBuffer::underflow() {
int recv_bytes = soc.read(gBuffer, BUFFER_SIZE);
if(recv_bytes > 0){
gCur = gBuffer;
gEnd = gBuffer+recv_bytes;
streambuf::setg(gBeg, gCur, gEnd);
return Tr::not_eof( *gCur );
}
return Tr::eof();
}
int SocketStreamBuffer::overflow(int c) {
if(c == Tr::eof())
return Tr::not_eof(c);
soc.write(c);
return c;
/*if(sync() >= 0)
return c;
return Tr::eof();*/
}/*
int SocketStreamBuffer::sync() {
if( soc.write( pBuffer, pCur-pBeg )){
pCur = pBuffer;
streambuf::setp(pBeg, pEnd);
return 0;
}
return -1;
}*/