aboutsummaryrefslogtreecommitdiff
path: root/response.go
diff options
context:
space:
mode:
Diffstat (limited to 'response.go')
-rw-r--r--response.go18
1 files changed, 14 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()
+}