diff --git a/NEWS b/NEWS index d3465bf65..8a2d62609 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,6 @@ ver 0.18.2 (2013/??/??) +* protocol: + - "close" flushes the output buffer * input: - curl: fix bug with redirected streams * playlist: diff --git a/src/ClientRead.cxx b/src/ClientRead.cxx index 925e1502d..22edefe60 100644 --- a/src/ClientRead.cxx +++ b/src/ClientRead.cxx @@ -57,6 +57,11 @@ Client::OnSocketInput(void *data, size_t length) main_loop->Break(); return InputResult::CLOSED; + case CommandResult::FINISH: + if (Flush()) + Close(); + return InputResult::CLOSED; + case CommandResult::CLOSE: Close(); return InputResult::CLOSED; diff --git a/src/command/CommandResult.hxx b/src/command/CommandResult.hxx index bbc16146b..9916b70cb 100644 --- a/src/command/CommandResult.hxx +++ b/src/command/CommandResult.hxx @@ -47,6 +47,12 @@ enum class CommandResult { */ ERROR, + /** + * The client has asked MPD to close the connection. MPD will + * flush the remaining output buffer first. + */ + FINISH, + /** * The connection to this client shall be closed. */ diff --git a/src/command/OtherCommands.cxx b/src/command/OtherCommands.cxx index 75faa4dc2..7b2cb1331 100644 --- a/src/command/OtherCommands.cxx +++ b/src/command/OtherCommands.cxx @@ -99,7 +99,7 @@ CommandResult handle_close(gcc_unused Client &client, gcc_unused int argc, gcc_unused char *argv[]) { - return CommandResult::CLOSE; + return CommandResult::FINISH; } CommandResult