aboutsummaryrefslogtreecommitdiffstats
path: root/src/event/FullyBufferedSocket.hxx
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2013-11-06 20:36:37 +0100
committerMax Kellermann <max@duempel.org>2013-11-06 21:52:24 +0100
commit422b8472fec9443250895a281b6b0a20190daa22 (patch)
treeca6cd030ed408fc891445f0976ab3be7bc46e58b /src/event/FullyBufferedSocket.hxx
parent5b213b0504849b894cf930474fb1bff7cb34cd70 (diff)
downloadmpd-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 'src/event/FullyBufferedSocket.hxx')
-rw-r--r--src/event/FullyBufferedSocket.hxx12
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