src/Network/Buffer.cc
changeset 378 5589abf5e61b
parent 329 42ad4965424f
child 380 d193dd1d8a7e
--- 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);