From ae3fc2fc73450682aac96ba4553986c65ec46be4 Mon Sep 17 00:00:00 2001 From: Adnan Maolood Date: Tue, 23 Feb 2021 17:32:23 -0500 Subject: [PATCH] response: Add Close method --- response.go | 18 ++++++++++++++---- timeout.go | 4 ++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/response.go b/response.go index e091c1c..9177b4a 100644 --- a/response.go +++ b/response.go @@ -204,23 +204,29 @@ type ResponseWriter interface { // Flush sends any buffered data to the client. Flush() error + + // Close closes the connection. + // Any blocked Read or Write operations will be unblocked and return errors. + Close() error } type responseWriter struct { b *bufio.Writer + closer io.Closer mediatype string wroteHeader bool bodyAllowed bool } // NewResponseWriter returns a ResponseWriter that uses the provided io.Writer. -func NewResponseWriter(w io.Writer) ResponseWriter { - return newResponseWriter(w) +func NewResponseWriter(wc io.WriteCloser) ResponseWriter { + return newResponseWriter(wc) } -func newResponseWriter(w io.Writer) *responseWriter { +func newResponseWriter(wc io.WriteCloser) *responseWriter { return &responseWriter{ - b: bufio.NewWriter(w), + b: bufio.NewWriter(wc), + closer: wc, } } @@ -266,3 +272,7 @@ func (w *responseWriter) Flush() error { // Write errors from writeHeader will be returned here. return w.b.Flush() } + +func (w *responseWriter) Close() error { + return w.closer.Close() +} diff --git a/timeout.go b/timeout.go index 0ee21e4..20b270c 100644 --- a/timeout.go +++ b/timeout.go @@ -102,3 +102,7 @@ func (w *timeoutWriter) writeHeaderLocked(status Status, meta string) { func (w *timeoutWriter) Flush() error { return nil } + +func (w *timeoutWriter) Close() error { + return nil +}