[Libreoffice-commits] online.git: Branch 'private/Ashod/nonblocking' - net/socket.hpp

Ashod Nakashian ashod.nakashian at collabora.co.uk
Sat Feb 18 21:18:48 UTC 2017


 net/socket.hpp |   84 +++++++++++++++++++++++++++++++--------------------------
 1 file changed, 47 insertions(+), 37 deletions(-)

New commits:
commit 6de885e5ffae29f3df4ef88c9ba14a46f0c28c6b
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Sat Feb 18 15:35:29 2017 -0500

    nb: move more into BufferingSocket
    
    Reduces code duplication and makes
    buffer management easier.
    
    Change-Id: I4f3bcf02b273d7ae23f4fd7600e66644ccec0d2a
    Reviewed-on: https://gerrit.libreoffice.org/34414
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/net/socket.hpp b/net/socket.hpp
index f350c0b..79663d9 100644
--- a/net/socket.hpp
+++ b/net/socket.hpp
@@ -318,38 +318,8 @@ public:
                              HandleResult::CONTINUE;
     }
 
-    /// Override to reading data from socket.
-    virtual bool readIncomingData() = 0;
-
-    /// Override to write data out to socket.
-    virtual void writeOutgoingData() = 0;
-
-    int getPollEvents() override
-    {
-        // Only poll for read we if we have nothing to write.
-        return (_outBuffer.empty() ? POLLIN : POLLIN | POLLOUT);
-    }
-
-protected:
-    BufferingSocket(const int fd) :
-        Socket(fd)
-    {
-    }
-
-    std::vector< char > _inBuffer;
-    std::vector< char > _outBuffer;
-
-private:
-    /// Override to handle read data.
-    /// Called after successful socket reads.
-    virtual void handleIncomingMessage() = 0;
-};
-
-/// A plain, non-blocking, data streaming socket.
-class StreamSocket : public BufferingSocket
-{
-public:
-    bool readIncomingData() override
+    /// Reads data by invoking readData() and buffering.
+    virtual bool readIncomingData()
     {
         ssize_t len;
         char buf[4096];
@@ -359,7 +329,7 @@ public:
             // TODO: Cap the buffer size, lest we grow beyond control.
             do
             {
-                len = ::read(getFD(), buf, sizeof(buf));
+                len = readData(buf, sizeof(buf));
             }
             while (len < 0 && errno == EINTR);
 
@@ -376,13 +346,17 @@ public:
         return len != 0; // zero is eof / clean socket close.
     }
 
-    void writeOutgoingData() override
+    /// Override to write data out to socket.
+    virtual void writeOutgoingData()
     {
         assert (_outBuffer.size() > 0);
         ssize_t len;
-        do {
-            len = ::write(getFD(), &_outBuffer[0], _outBuffer.size());
-        } while (len < 0 && errno == EINTR);
+        do
+        {
+            len = writeData(&_outBuffer[0], _outBuffer.size());
+        }
+        while (len < 0 && errno == EINTR);
+
         if (len > 0)
         {
             _outBuffer.erase(_outBuffer.begin(),
@@ -391,6 +365,42 @@ public:
         // else poll will handle errors
     }
 
+    /// Override to handle reading of socket data differently.
+    virtual int readData(char* buf, int len)
+    {
+        return ::read(getFD(), buf, len);
+    }
+
+    /// Override to handle writing data to socket differently.
+    virtual int writeData(const char* buf, const int len)
+    {
+        return ::write(getFD(), buf, len);
+    }
+
+    int getPollEvents() override
+    {
+        // Only poll for read we if we have nothing to write.
+        return (_outBuffer.empty() ? POLLIN : POLLIN | POLLOUT);
+    }
+
+protected:
+    BufferingSocket(const int fd) :
+        Socket(fd)
+    {
+    }
+
+    std::vector< char > _inBuffer;
+    std::vector< char > _outBuffer;
+
+private:
+    /// Override to handle read data.
+    /// Called after successful socket reads.
+    virtual void handleIncomingMessage() = 0;
+};
+
+/// A plain, non-blocking, data streaming socket.
+class StreamSocket : public BufferingSocket
+{
 protected:
     StreamSocket(const int fd) :
         BufferingSocket(fd)


More information about the Libreoffice-commits mailing list