diff options
author | Max Kellermann <max@duempel.org> | 2013-11-06 20:36:37 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2013-11-06 21:52:24 +0100 |
commit | 422b8472fec9443250895a281b6b0a20190daa22 (patch) | |
tree | ca6cd030ed408fc891445f0976ab3be7bc46e58b /src/event/FullyBufferedSocket.hxx | |
parent | 5b213b0504849b894cf930474fb1bff7cb34cd70 (diff) | |
download | mpd-422b8472fec9443250895a281b6b0a20190daa22.tar.gz mpd-422b8472fec9443250895a281b6b0a20190daa22.tar.xz mpd-422b8472fec9443250895a281b6b0a20190daa22.zip |
event/FullyBufferedSocket: try to write without extra roundtrip
Postpone the write using IdleMonitor instead of scheduling a write
event. This reduces the number of system calls, because we don't need
to register and unregister the write event in epoll.
Diffstat (limited to '')
-rw-r--r-- | src/event/FullyBufferedSocket.hxx | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/event/FullyBufferedSocket.hxx b/src/event/FullyBufferedSocket.hxx index 90638e60b..c50bb5f61 100644 --- a/src/event/FullyBufferedSocket.hxx +++ b/src/event/FullyBufferedSocket.hxx @@ -22,24 +22,29 @@ #include "check.h" #include "BufferedSocket.hxx" +#include "IdleMonitor.hxx" #include "util/PeakBuffer.hxx" #include "Compiler.h" /** * A #BufferedSocket specialization that adds an output buffer. */ -class FullyBufferedSocket : protected BufferedSocket { +class FullyBufferedSocket : protected BufferedSocket, private IdleMonitor { PeakBuffer output; public: FullyBufferedSocket(int _fd, EventLoop &_loop, size_t normal_size, size_t peak_size=0) - :BufferedSocket(_fd, _loop), + :BufferedSocket(_fd, _loop), IdleMonitor(_loop), output(normal_size, peak_size) { } using BufferedSocket::IsDefined; - using BufferedSocket::Close; + + void Close() { + IdleMonitor::Cancel(); + BufferedSocket::Close(); + } private: ssize_t DirectWrite(const void *data, size_t length); @@ -58,6 +63,7 @@ protected: bool Write(const void *data, size_t length); virtual bool OnSocketReady(unsigned flags) override; + virtual void OnIdle() override; }; #endif |