|
|
@@ -31,9 +31,14 @@ func (l *Listener) Close() error {
|
|
|
|
|
|
type flushWriter struct {
|
|
|
w io.Writer
|
|
|
+ d *signal.Done
|
|
|
}
|
|
|
|
|
|
func (fw flushWriter) Write(p []byte) (n int, err error) {
|
|
|
+ if fw.d.Done() {
|
|
|
+ return 0, io.ErrClosedPipe
|
|
|
+ }
|
|
|
+
|
|
|
n, err = fw.w.Write(p)
|
|
|
if f, ok := fw.w.(http.Flusher); ok {
|
|
|
f.Flush()
|
|
|
@@ -61,8 +66,8 @@ func (l *Listener) ServeHTTP(writer http.ResponseWriter, request *http.Request)
|
|
|
done := signal.NewDone()
|
|
|
l.handler(&Connection{
|
|
|
Reader: request.Body,
|
|
|
- Writer: flushWriter{writer},
|
|
|
- Closer: common.NewChainedClosable(request.Body, done),
|
|
|
+ Writer: flushWriter{w: writer, d: done},
|
|
|
+ Closer: common.NewChainedClosable(done, request.Body),
|
|
|
Local: l.Addr(),
|
|
|
Remote: l.Addr(),
|
|
|
})
|