net/Socket.hpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-)
New commits: commit ef71c66b658538bdd7f1980bb0425f7b92ba49fc Author: Michael Meeks <michael.me...@collabora.com> Date: Mon Mar 6 16:20:03 2017 +0000 Socket API to allow asynchronous writing. diff --git a/net/Socket.hpp b/net/Socket.hpp index ba55503..3090297 100644 --- a/net/Socket.hpp +++ b/net/Socket.hpp @@ -353,6 +353,12 @@ public: /// Called after successful socket reads. virtual void handleIncomingMessage() = 0; + /// Is there queued up data that we want to write ? + virtual bool hasQueuedWrites() const { return false; } + + /// Do some of the queued writing. + virtual void performWrites() {} + /// Called when the is disconnected and will be destroyed. /// Will be called exactly once. virtual void onDisconnect() @@ -387,8 +393,11 @@ public: int getPollEvents() override { - // Only poll for read if we have nothing to write. - return (_outBuffer.empty() ? POLLIN : POLLIN | POLLOUT); + std::cerr << "empty ? " << _outBuffer.empty() << " has queued write " << _socketHandler->hasQueuedWrites() << "\n"; + if (!_outBuffer.empty() || _socketHandler->hasQueuedWrites()) + return POLLIN | POLLOUT; + else + return POLLIN; } /// Send data to the socket peer. @@ -488,6 +497,10 @@ protected: _socketHandler->handleIncomingMessage(); } + // If we have space for writing and that was requested + if ((events & POLLOUT) && _outBuffer.empty()) + _socketHandler->performWrites(); + // SSL might want to do handshake, // even if we have no data to write. if ((events & POLLOUT) || !_outBuffer.empty()) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits