diff options
author | Max Kellermann <max@duempel.org> | 2013-01-30 10:36:47 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2013-01-30 11:03:44 +0100 |
commit | a291415326f87afe5b42a89e9a90029b876895f2 (patch) | |
tree | 0ecd6f1e42a443ed5c96457682af3cafc39bc16c /src/event/BufferedSocket.cxx | |
parent | 4ad7456428913f5232768367f2c0694bcb4540bb (diff) | |
download | mpd-a291415326f87afe5b42a89e9a90029b876895f2.tar.gz mpd-a291415326f87afe5b42a89e9a90029b876895f2.tar.xz mpd-a291415326f87afe5b42a89e9a90029b876895f2.zip |
event/BufferedSocket: move output buffer to FullyBufferedSocket
BufferedSocket has just an input buffer, and FullyBufferedSocket adds
the output buffer.
Diffstat (limited to 'src/event/BufferedSocket.cxx')
-rw-r--r-- | src/event/BufferedSocket.cxx | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/src/event/BufferedSocket.cxx b/src/event/BufferedSocket.cxx index dec60b5f7..05e703441 100644 --- a/src/event/BufferedSocket.cxx +++ b/src/event/BufferedSocket.cxx @@ -33,26 +33,6 @@ BufferedSocket::~BufferedSocket() } BufferedSocket::ssize_t -BufferedSocket::DirectWrite(const void *data, size_t length) -{ - const auto nbytes = SocketMonitor::Write((const char *)data, length); - if (gcc_unlikely(nbytes < 0)) { - const auto code = GetSocketError(); - if (IsSocketErrorAgain(code)) - return 0; - - Cancel(); - - if (IsSocketErrorClosed(code)) - OnSocketClosed(); - else - OnSocketError(NewSocketError(code)); - } - - return nbytes; -} - -BufferedSocket::ssize_t BufferedSocket::DirectRead(void *data, size_t length) { const auto nbytes = SocketMonitor::Read((char *)data, length); @@ -76,30 +56,6 @@ BufferedSocket::DirectRead(void *data, size_t length) } bool -BufferedSocket::WriteFromBuffer() -{ - assert(IsDefined()); - - size_t length; - const void *data = output.Read(&length); - if (data == nullptr) { - CancelWrite(); - return true; - } - - auto nbytes = DirectWrite(data, length); - if (gcc_unlikely(nbytes <= 0)) - return nbytes == 0; - - output.Consume(nbytes); - - if (output.IsEmpty()) - CancelWrite(); - - return true; -} - -bool BufferedSocket::ReadToBuffer() { assert(IsDefined()); @@ -119,38 +75,6 @@ BufferedSocket::ReadToBuffer() } bool -BufferedSocket::Write(const void *data, size_t length) -{ - assert(IsDefined()); - -#if 0 - /* TODO: disabled because this would add overhead on some callers (the ones that often), but it may be useful */ - - if (output.IsEmpty()) { - /* try to write it directly first */ - const auto nbytes = DirectWrite(data, length); - if (gcc_likely(nbytes > 0)) { - data = (const uint8_t *)data + nbytes; - length -= nbytes; - if (length == 0) - return true; - } else if (nbytes < 0) - return false; - } -#endif - - if (!output.Append(data, length)) { - // TODO - OnSocketError(g_error_new_literal(g_quark_from_static_string("buffered_socket"), - 0, "Output buffer is full")); - return false; - } - - ScheduleWrite(); - return true; -} - -bool BufferedSocket::ResumeInput() { assert(IsDefined()); @@ -220,20 +144,6 @@ BufferedSocket::OnSocketReady(unsigned flags) if (input == nullptr || !fifo_buffer_is_full(input)) ScheduleRead(); - - /* just in case the OnSocketInput() method has added - data to the output buffer: try to send it now - instead of waiting for the next event loop - iteration */ - if (!output.IsEmpty()) - flags |= WRITE; - } - - if (flags & WRITE) { - assert(!output.IsEmpty()); - - if (!WriteFromBuffer()) - return false; } return true; |