--- a/src/Network/Buffer.cc Mon Dec 15 16:41:00 2008 +0000
+++ b/src/Network/Buffer.cc Mon Dec 15 23:56:42 2008 +0000
@@ -8,7 +8,7 @@
/*
* NetworkBufferBase
*/
-NetworkBufferBase::NetworkBufferBase (NetworkSocket &socket, size_t size_hint) :
+NetworkBufferBase::NetworkBufferBase (NetworkSocket *socket, size_t size_hint) :
socket(socket), buf(0), size(0), offset(0) {
// allocate initial buffer
@@ -59,15 +59,14 @@
/*
* NetworkBufferInput
*/
-NetworkBufferInput::NetworkBufferInput (NetworkSocket &socket, size_t size_hint) :
+NetworkBufferInput::NetworkBufferInput (NetworkSocket *socket, size_t size_hint) :
NetworkBufferBase(socket, size_hint)
{
}
bool NetworkBufferInput::try_read (size_t item_size) {
- int ret;
- size_t to_read = item_size;
+ size_t ret, to_read = item_size;
// keept reads at at least NETWORK_BUFFER_CHUNK_SIZE bytes
if (to_read < NETWORK_BUFFER_CHUNK_SIZE)
@@ -77,22 +76,11 @@
resize(to_read);
// read once
- try {
- ret = socket.recv(buf + offset, to_read);
-
- } catch (CL_Error &e) {
- if (errno == EAGAIN)
- return false;
+ ret = socket->recv(buf + offset, to_read);
- else
- throw NetworkSocketOSError(socket, "recv");
- }
-
- // handle EOF
+ // nothing left?
if (ret == 0)
- throw NetworkSocketEOFError(socket, "recv");
-
- assert(ret >= 0);
+ return false;
// update offset
offset += ret;
@@ -129,7 +117,7 @@
/*
* NetworkBufferOutput
*/
-NetworkBufferOutput::NetworkBufferOutput (NetworkSocket &socket, size_t size_hint) :
+NetworkBufferOutput::NetworkBufferOutput (NetworkSocket *socket, size_t size_hint) :
NetworkBufferBase(socket, size_hint)
{
@@ -137,22 +125,13 @@
void NetworkBufferOutput::push_write (char *buf_ptr, size_t buf_size) {
- int ret;
+ size_t ret;
// try and short-circuit writes unless we have already buffered data
if (offset == 0) {
- try {
- // attempt to send something
- ret = socket.send(buf_ptr, buf_size);
+ // attempt to send something
+ ret = socket->send(buf_ptr, buf_size);
- } catch (CL_Error &e) {
- // ignore EAGAIN, detect this by setting ret to -1
- if (errno != EAGAIN)
- throw NetworkSocketOSError(socket, "send");
-
- ret = -1;
- }
-
// if we managed to send something, adjust buf/size and buffer
if (ret > 0) {
// sanity-check
@@ -175,24 +154,18 @@
}
void NetworkBufferOutput::flush_write (void) {
- int ret;
+ size_t ret;
// ignore if we don't have any data buffered
if (offset == 0)
return;
// attempt to write as much as possible
- try {
- ret = socket.send(buf, offset);
+ ret = socket->send(buf, offset);
- } catch (CL_Error &e) {
- // ignore EAGAIN and just return
- if (errno == EAGAIN)
- return;
-
- else
- throw NetworkSocketOSError(socket, "send");
- }
+ // busy?
+ if (ret == 0)
+ return;
// trim the buffer
trim(ret);