From 4ad7456428913f5232768367f2c0694bcb4540bb Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 30 Jan 2013 10:53:32 +0100 Subject: event/SocketMonitor: OnSocketReady() returns bool --- src/event/BufferedSocket.cxx | 10 ++++++---- src/event/BufferedSocket.hxx | 2 +- src/event/SocketMonitor.hxx | 5 ++++- 3 files changed, 11 insertions(+), 6 deletions(-) (limited to 'src/event') diff --git a/src/event/BufferedSocket.cxx b/src/event/BufferedSocket.cxx index b95519e4..dec60b5f 100644 --- a/src/event/BufferedSocket.cxx +++ b/src/event/BufferedSocket.cxx @@ -202,21 +202,21 @@ BufferedSocket::ConsumeInput(size_t nbytes) fifo_buffer_consume(input, nbytes); } -void +bool BufferedSocket::OnSocketReady(unsigned flags) { assert(IsDefined()); if (gcc_unlikely(flags & (ERROR|HANGUP))) { OnSocketClosed(); - return; + return false; } if (flags & READ) { assert(input == nullptr || !fifo_buffer_is_full(input)); if (!ReadToBuffer() || !ResumeInput()) - return; + return false; if (input == nullptr || !fifo_buffer_is_full(input)) ScheduleRead(); @@ -233,6 +233,8 @@ BufferedSocket::OnSocketReady(unsigned flags) assert(!output.IsEmpty()); if (!WriteFromBuffer()) - return; + return false; } + + return true; } diff --git a/src/event/BufferedSocket.hxx b/src/event/BufferedSocket.hxx index 6e55a5e1..23fd97d3 100644 --- a/src/event/BufferedSocket.hxx +++ b/src/event/BufferedSocket.hxx @@ -113,7 +113,7 @@ protected: virtual void OnSocketClosed() = 0; private: - virtual void OnSocketReady(unsigned flags) override; + virtual bool OnSocketReady(unsigned flags) override; }; #endif diff --git a/src/event/SocketMonitor.hxx b/src/event/SocketMonitor.hxx index b8ded196..c815e4f5 100644 --- a/src/event/SocketMonitor.hxx +++ b/src/event/SocketMonitor.hxx @@ -115,7 +115,10 @@ public: ssize_t Write(const void *data, size_t length); protected: - virtual void OnSocketReady(unsigned flags) = 0; + /** + * @return false if the socket has been closed + */ + virtual bool OnSocketReady(unsigned flags) = 0; public: /* GSource callbacks */ -- cgit v1.2.3